﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

#Область ДляВызоваИзДругихПодсистем

// Переопределяет настройки печати для объекта.
//
// Параметры:
//  Настройки - см. УправлениеПечатью.НастройкиПечатиОбъекта.
//
Процедура ПриОпределенииНастроекПечати(Настройки) Экспорт
	
	Настройки.ПриДобавленииКомандПечати = Истина;
	
КонецПроцедуры

// Заполняет список команд печати.
// 
// Параметры:
//  КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	// Доверенность
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "Доверенность";
	КомандаПечати.Представление = НСтр("ru = 'Доверенность'");
	
	УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "ФайлДоверенности",
		Справочники.МашиночитаемыеДоверенностиПрисоединенныеФайлы.ПустаяСсылка(), ВидСравнения.НеРавно);
	
КонецПроцедуры

// Формирует печатные формы.
//
// Параметры:
//  МассивОбъектов - Массив - ссылки на объекты, которые нужно распечатать;
//  ПараметрыПечати - Структура - дополнительные настройки печати;
//  КоллекцияПечатныхФорм - ТаблицаЗначений - сформированные табличные документы (выходной параметр)
//  ОбъектыПечати - СписокЗначений - значение - ссылка на объект;
//                                            представление - имя области, в которой был выведен объект (выходной параметр);
//  ПараметрыВывода - Структура - дополнительные параметры сформированных табличных документов (выходной параметр).
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Доверенность");
	Если ПечатнаяФорма <> Неопределено Тогда
		ПечатнаяФорма.ТабличныйДокумент = ПечатьДоверенности(МассивОбъектов, ОбъектыПечати, ПараметрыВывода.КодЯзыка);
		ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Счет на оплату'");
		ПечатнаяФорма.ПолныйПутьКМакету = "Справочник.МашиночитаемыеДоверенности.ПФ_MXL_Доверенность";
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция ИдентификаторСхемыМЧД()
	Возврат "http://www.1c.ru/ssl/emchd1";
КонецФункции

Функция ЦелевоеПространствоИмен()
	Возврат "urn://x-artefacts/EMCHD_1";
КонецФункции

// Параметры:
//  Объект - СправочникОбъект.МашиночитаемыеДоверенности
//
Функция СформироватьФайлДоверенности(Объект) Экспорт
	
	ДанныеДоверенности = ДанныеДоверенности(Объект);
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку("UTF-8");
	ЗаписьXML.ЗаписатьОбъявлениеXML();
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ДанныеДоверенности, "Доверенность");
	ДоверенностьXML = ЗаписьXML.Закрыть();
	
	ДоверенностьXML = СтрЗаменить(ДоверенностьXML, """" + ИдентификаторСхемыМЧД() + """",
		 """" + ЦелевоеПространствоИмен()  + """");
	
	ИдентификаторФайла = ДанныеДоверенности.ИдФайл;
	
	Результат = Новый Структура;
	Результат.Вставить("Текст", ДоверенностьXML);
	Результат.Вставить("ИмяБезРасширения", ИдентификаторФайла);
	Результат.Вставить("РасширениеБезТочки", "xml");
	
	Возврат Результат;
	
КонецФункции

// Параметры:
//  Объект - СправочникОбъект.МашиночитаемыеДоверенности
//
Функция ДанныеДоверенности(Объект)
	
	ДляНалоговыхОрганов = Объект.ДляНалоговыхОрганов;
	
	ВерсияФормата = "EMCHD_1";
	ФлагОбязательностиЭлементов = "000" + ?(ДляНалоговыхОрганов, "1", "0") + "0000";
	ИдентификаторФайлаДляПредставленияИнтересовВНалоговомОргане = "";
	ИныеСведения = Объект.ИныеСведения;
	КодФормыПоКлассификаторуНалоговойДокументации = "1110310";
	
	Документ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ДокументТип"));
	Если ДляНалоговыхОрганов Тогда
		Документ.КНД = КодФормыПоКлассификаторуНалоговойДокументации;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(Объект.РодительскаяДоверенность) Тогда
		Передоверие = Передоверие(Объект);
		Документ.Передов = Передоверие;
	Иначе
		Доверенность = Доверенность(Объект);
		Документ.Довер = Доверенность;
	КонецЕсли;
	
	Префикс = "ON_EMCHD";
	ДатаФормирования = Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd;");
	ИдентификационныйНомер = Объект.НомерДоверенности;
	ИдентификаторФайла = СтрШаблон("%1_%2_%3", Префикс, ДатаФормирования, ИдентификационныйНомер);
	
	Если ДляНалоговыхОрганов Тогда
		Префикс = "ON_DOVEL";
		Получатель = XMLСтрока(Объект.КодНалоговогоОрганаПредставления);
		КонечныйПолучатель = Получатель;
		Если Объект.НалоговыеОрганыДействия.Количество() = 1 Тогда
			КонечныйПолучатель = XMLСтрока(Объект.НалоговыеОрганыДействия[0].КодНалоговогоОргана);
		КонецЕсли;
		
		ОписанияДоверителей = Объект.Доверители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", 
			Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
		
		Отправитель = "";
		Для Каждого ОписаниеДоверителя Из ОписанияДоверителей Цикл
			РеквизитыДоверителя = ОписаниеДоверителя.ДоверительРеквизиты.Получить();
			Отправитель = XMLСтрока(РеквизитыДоверителя.ИНН);
			Если Не РеквизитыДоверителя.ЭтоИндивидуальныйПредприниматель И Не РеквизитыДоверителя.ЭтоФизическоеЛицо Тогда
				Отправитель = Отправитель + XMLСтрока(РеквизитыДоверителя.КПП);
			КонецЕсли;
			Прервать;
		КонецЦикла;
		
		ИдентификаторФайлаДляПредставленияИнтересовВНалоговомОргане = СтрШаблон("%1_%2_%3_%4_%5_%6", Префикс, Получатель, КонечныйПолучатель, Отправитель, ДатаФормирования, ИдентификационныйНомер);
	КонецЕсли;
	
	ОписаниеДоверенности = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ДоверенностьТип"));
	ОписаниеДоверенности.ВерсФорм = ВерсияФормата;
	ОписаниеДоверенности.ПрЭлФорм = ФлагОбязательностиЭлементов;
	ОписаниеДоверенности.ИдФайл = ИдентификаторФайла;
	Если ДляНалоговыхОрганов Тогда
		ОписаниеДоверенности.ИдФайлНО = ИдентификаторФайлаДляПредставленияИнтересовВНалоговомОргане;
	КонецЕсли;
	Если ЗначениеЗаполнено(ИныеСведения) Тогда
		ОписаниеДоверенности.ИнСвед = ИныеСведения;
	КонецЕсли;
	ОписаниеДоверенности.Документ = Документ;
	
	Возврат ОписаниеДоверенности;
	
КонецФункции

Функция Доверенность(Объект)
	
	СведенияОДоверенности = СведенияОДоверенности(Объект);
	СведенияОДоверителях = СведенияОДоверителях(Объект);
	СведенияОПредставителях = СведенияОПредставителях(Объект);
	СведенияОПолномочияхПредставителей = СведенияОПолномочияхПредставителей(Объект);
	
	Доверенность = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ДоверТип"));
	Доверенность.СвДов = СведенияОДоверенности;
	Для Каждого СведенияОДоверителе Из СведенияОДоверителях Цикл
		Доверенность.СвДоверит.Добавить(СведенияОДоверителе);
	КонецЦикла;
	Для Каждого СведенияОПредставителе Из СведенияОПредставителях Цикл
		Доверенность.СвУпПред.Добавить(СведенияОПредставителе);
	КонецЦикла;
	Доверенность.СвПолн = СведенияОПолномочияхПредставителей;
	
	Возврат Доверенность;
	
КонецФункции

Функция СведенияОДоверенности(Объект) // СвДовТип
	
	ВидДоверенности = "1";
	
	Если Объект.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.ОднократноеПередоверие Тогда
		ПризнакВозможностиПередоверия = "2";
	ИначеЕсли Объект.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.МногократноеПередоверие Тогда
		ПризнакВозможностиПередоверия = "3";
	Иначе
		ПризнакВозможностиПередоверия = "1";
	КонецЕсли;
	
	ВнутреннийНомерДоверенности = Объект.Код;
	ЕдиныйРегистрационныйНомер = Объект.НомерДоверенности;
	ДатаВыдачиДоверенности = Формат(Объект.ДатаВыдачи, "ДФ=yyyy-MM-dd");
	СрокДействияДоверенности = Формат(Объект.ДатаОкончания, "ДФ=yyyy-MM-dd");
	КодНалоговогоОрганаПредставления = Объект.КодНалоговогоОрганаПредставления; 
	КодыНалоговыхОргановДействия = Объект.НалоговыеОрганыДействия.ВыгрузитьКолонку("КодНалоговогоОргана");
	СведенияОбИнформационнойСистеме = "https://m4d.nalog.gov.ru/EMCHD/check-status?guid=" + ЕдиныйРегистрационныйНомер;
	
	СведенияОДоверенности = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвДовТип"));
	СведенияОДоверенности.ВидДовер = ВидДоверенности;
	СведенияОДоверенности.ПрПередов = ПризнакВозможностиПередоверия;
	СведенияОДоверенности.ВнНомДовер = ВнутреннийНомерДоверенности;
	СведенияОДоверенности.НомДовер = ЕдиныйРегистрационныйНомер;
	СведенияОДоверенности.ДатаВыдДовер = ДатаВыдачиДоверенности;
	СведенияОДоверенности.СрокДейст = СрокДействияДоверенности;
	Если Объект.ДляНалоговыхОрганов Тогда
		СведенияОДоверенности.КодНО = КодНалоговогоОрганаПредставления;
		Для Каждого КодНалоговогоОрганаДействия Из КодыНалоговыхОргановДействия Цикл
			СведенияОДоверенности.КодНОДейст.Добавить(КодНалоговогоОрганаДействия);
		КонецЦикла;
	КонецЕсли;
	СведенияОДоверенности.СведСист = СведенияОбИнформационнойСистеме;
	
	Возврат СведенияОДоверенности;
	
КонецФункции

Функция СведенияОДоверителях(Доверенность)
	
	ДляНалоговыхОрганов = Доверенность.ДляНалоговыхОрганов;
	СведенияОДоверителях = Новый Массив;
	
	ОписанияДоверителей = Доверенность.Доверители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", 
		Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
		
	Для Каждого ОписаниеДоверителя Из ОписанияДоверителей Цикл
		СведенияОДоверителе = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвДоверитТип"));	
		Доверитель = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ДоверитТип"));	
		РеквизитыДоверителя = ОписаниеДоверителя.ДоверительРеквизиты.Получить();
		ОписанияЛицДоверителя = Доверенность.Доверители.НайтиСтроки(
			Новый Структура("ИдентификаторРодителя", ОписаниеДоверителя.Идентификатор));
		
		РеквизитыЛицДоверителя = Новый Массив;
		РеквизитыЛицУправляющихКомпаний = Новый Соответствие;
		Для Каждого ОписаниеЛицаДоверителя Из ОписанияЛицДоверителя Цикл
			РеквизитыЛицаДоверителя = ОписаниеЛицаДоверителя.ДоверительРеквизиты.Получить();
			Если РеквизитыЛицаДоверителя.ЭтоФизическоеЛицо Тогда
				РеквизитыЛицДоверителя.Добавить(РеквизитыЛицаДоверителя);
			Иначе
				РеквизитыЛицУправляющейКомпании = Новый Массив;
				ОписанияЛицУправляющейКомпании = Доверенность.Доверители.НайтиСтроки(
					Новый Структура("ИдентификаторРодителя", ОписаниеЛицаДоверителя.Идентификатор));
				РеквизитыЛицУправляющихКомпаний.Вставить(РеквизитыЛицаДоверителя, РеквизитыЛицУправляющейКомпании);
				Для Каждого ОписаниеЛицаУправляющейКомпании Из ОписанияЛицУправляющейКомпании Цикл
					РеквизитыЛицаУправляющейКомпании = ОписаниеЛицаУправляющейКомпании.ДоверительРеквизиты.Получить();
					РеквизитыЛицУправляющейКомпании.Добавить(РеквизитыЛицаУправляющейКомпании);
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
		
		ТипДоверителя = Неопределено;
		
		ДоверителемЯвляетсяФизическоеЛицо = РеквизитыДоверителя.ЭтоФизическоеЛицо;
		Если ДоверителемЯвляетсяФизическоеЛицо Тогда 
			ТипДоверителя = "4";
			СведенияОФизическомЛицеДоверителе = СведенияОФизическомЛицеДоверителе(РеквизитыДоверителя, ДляНалоговыхОрганов);
			Доверитель.ФЛДовер = СведенияОФизическомЛицеДоверителе;
		Иначе
			Если РеквизитыДоверителя.ЭтоИностраннаяОрганизация Тогда
				ТипДоверителя = "2";
				СведенияОбИностранномЮридическомЛице = СведенияОДоверителеИностранногоЮридическогоЛица(РеквизитыДоверителя, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				Доверитель.ИнОргДовер = СведенияОбИностранномЮридическомЛице;
			ИначеЕсли РеквизитыДоверителя.ЭтоИндивидуальныйПредприниматель Тогда
				ТипДоверителя = "3";
				СведенияОбИндивидуальномПредпринимателе = СведенияОбИндивидуальномПредпринимателе(РеквизитыДоверителя, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				Доверитель.ИПДовер = СведенияОбИндивидуальномПредпринимателе;
			Иначе
				ТипДоверителя = "1";
				СведенияОДоверителеЮридическогоЛица = СведенияОДоверителеЮридическогоЛица(РеквизитыДоверителя, РеквизитыЛицУправляющихКомпаний, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				Доверитель.РосОргДовер = СведенияОДоверителеЮридическогоЛица;
			КонецЕсли;
		КонецЕсли;
		
		Если ТипДоверителя <> Неопределено Тогда
			СведенияОДоверителе.ТипДоверит = ТипДоверителя;
			СведенияОДоверителе.Доверит = Доверитель;
			СведенияОДоверителях.Добавить(СведенияОДоверителе);
		КонецЕсли;		
	
	КонецЦикла;
	
	Возврат СведенияОДоверителях;
	
КонецФункции

Функция СведенияОДоверителеЮридическогоЛица(РеквизитыОрганизации, РеквизитыУправляющихКомпаний, РеквизитыФизическихЛиц, ДляНалоговыхОрганов) // РосОргДоверТип
	
	ЕдиноличнымИсполнительнымОрганомВыступаетУправляющаяКомпания = "0";
	ЕдиноличнымИсполнительнымОрганомВыступаетИндивидуальныйПредприниматель = "0";
	ЕдиноличнымИсполнительнымОрганомВыступаетФизическоеЛицо = "0";
	
	Для Каждого РеквизитыУправляющейКомпании Из РеквизитыУправляющихКомпаний Цикл
		Если РеквизитыУправляющейКомпании.Ключ.ЭтоИндивидуальныйПредприниматель Тогда
			ЕдиноличнымИсполнительнымОрганомВыступаетИндивидуальныйПредприниматель = "1";
		Иначе
			ЕдиноличнымИсполнительнымОрганомВыступаетУправляющаяКомпания = "1";
		КонецЕсли;
	КонецЦикла;
	
	Если Не ЗначениеЗаполнено(РеквизитыУправляющейКомпании) Тогда
		ЕдиноличнымИсполнительнымОрганомВыступаетФизическоеЛицо = "1";
	КонецЕсли;
	
	СведенияОЮридическомЛице = СведенияОЮридическомЛице(РеквизитыОрганизации);
	
	СведенияОДоверителеЮридическогоЛица = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "РосОргДоверТип"));
	СведенияОДоверителеЮридическогоЛица.ЕИОУК = ЕдиноличнымИсполнительнымОрганомВыступаетУправляющаяКомпания;
	СведенияОДоверителеЮридическогоЛица.ЕИОФЛ = ЕдиноличнымИсполнительнымОрганомВыступаетФизическоеЛицо;
	СведенияОДоверителеЮридическогоЛица.ЕИОИП = ЕдиноличнымИсполнительнымОрганомВыступаетИндивидуальныйПредприниматель;
	СведенияОДоверителеЮридическогоЛица.СвРосОрг = СведенияОЮридическомЛице;
	
	СведенияОЛицахДоверителя = СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя(
		РеквизитыОрганизации, РеквизитыУправляющихКомпаний, РеквизитыФизическихЛиц, ДляНалоговыхОрганов);
		
	Для Каждого СведенияОЛицеДоверителя Из СведенияОЛицахДоверителя Цикл
		СведенияОДоверителеЮридическогоЛица.ЛицоБезДов.Добавить(СведенияОЛицеДоверителя);
	КонецЦикла;
	
	Возврат СведенияОДоверителеЮридическогоЛица;
	
КонецФункции

Функция СведенияОФизическомЛицеДоверителе(РеквизитыФизическогоЛица, ДляНалоговыхОрганов) // ФЛДоверТип
	
	ИНН = РеквизитыФизическогоЛица.ИНН;
	СНИЛС = РеквизитыФизическогоЛица.СНИЛС;
	СведенияОФизическомЛице = СведенияОФизическомЛице(РеквизитыФизическогоЛица, ДляНалоговыхОрганов);
	
	СведенияОФизическомЛицеДоверителе = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ФЛДоверТип"));
	Если ЗначениеЗаполнено(ИНН) Тогда
		СведенияОФизическомЛицеДоверителе.ИННФЛ = ИНН;
	КонецЕсли;
	СведенияОФизическомЛицеДоверителе.СНИЛС = СНИЛС;
	СведенияОФизическомЛицеДоверителе.СведФЛ = СведенияОФизическомЛице;
	
	Возврат СведенияОФизическомЛицеДоверителе;
	
КонецФункции

Функция СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя(РеквизитыОрганизации, РеквизитыУправляющихКомпаний, РеквизитыФизическихЛиц, ДляНалоговыхОрганов) // ЛицоБезДовТип
	
	СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя = Новый Массив;
	ВидПолномочийЕдиноличногоИсполнительногоОргана = "1";
	Если РеквизитыУправляющихКомпаний.Количество() + РеквизитыФизическихЛиц.Количество() > 1 Тогда
		ВидПолномочийЕдиноличногоИсполнительногоОргана = "2";
	КонецЕсли;
	
	Для Каждого РеквизитыУправляющейКомпании Из РеквизитыУправляющихКомпаний Цикл
		СведенияОЛицеДоверителя = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ЛицоБезДовТип"));
		СведенияОЛицеДоверителя.ПолнЮЛ = ВидПолномочийЕдиноличногоИсполнительногоОргана;

		Если РеквизитыУправляющейКомпании.Ключ.ЭтоИндивидуальныйПредприниматель Тогда
			СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе = СведенияОбИндивидуальномПредпринимателе(
				РеквизитыУправляющейКомпании.Ключ, РеквизитыУправляющейКомпании.Значение, ДляНалоговыхОрганов);
			СведенияОЛицеДоверителя.СвИП = СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе;
		Иначе
			СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании = СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании(
				РеквизитыУправляющейКомпании.Ключ, РеквизитыУправляющейКомпании.Значение, ДляНалоговыхОрганов);
			СведенияОЛицеДоверителя.СВЮЛ = СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании;
		КонецЕсли;
		СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя.Добавить(СведенияОЛицеДоверителя);
	КонецЦикла;
	
	Для Каждого РеквизитыФизическогоЛица Из РеквизитыФизическихЛиц Цикл
		СведенияОЛицеДоверителя = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ЛицоБезДовТип"));
		СведенияОЛицеДоверителя.ПолнЮЛ = ВидПолномочийЕдиноличногоИсполнительногоОргана;
		
		Если РеквизитыФизическогоЛица.ЭтоИндивидуальныйПредприниматель Тогда
			СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе = СведенияОбИндивидуальномПредпринимателе(
				РеквизитыОрганизации, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(РеквизитыФизическогоЛица), ДляНалоговыхОрганов);
			СведенияОЛицеДоверителя.СвИП = СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе;
		Иначе
			СведенияОЕдиноличномИсполнительномОрганеФизическомЛице = СведенияОДолжностномЛице(РеквизитыФизическогоЛица, ДляНалоговыхОрганов);
			СведенияОЛицеДоверителя.СвФЛ = СведенияОЕдиноличномИсполнительномОрганеФизическомЛице;
		КонецЕсли;

		СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя.Добавить(СведенияОЛицеДоверителя);
	КонецЦикла;
	
	Возврат СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя;
	
КонецФункции

Функция СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании(РеквизитыУправляющейКомпании, РеквизитыФизическихЛиц, ДляНалоговыхОрганов) // СВЮЛ
	
	СведенияОЮридическомЛице = СведенияОЮридическомЛице(РеквизитыУправляющейКомпании);
	СведенияОДолжностныхЛицах = СведенияОДолжностныхЛицах(РеквизитыФизическихЛиц, ДляНалоговыхОрганов);
	
	СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СВЮЛТип"));
	СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании.СвЮЛЕИО = СведенияОЮридическомЛице;
	Для Каждого СведенияОДолжностномЛице Из СведенияОДолжностныхЛицах Цикл
		СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании.СвФЛ.Добавить(СведенияОДолжностномЛице);
	КонецЦикла;
	
	Возврат СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании;
	
КонецФункции

Функция СведенияОДолжностныхЛицах(РеквизитыФизическихЛиц, ДляНалоговыхОрганов)
	
	СведенияОДолжностныхЛицах = Новый Массив;
	
	Для Каждого РеквизитыФизическогоЛица Из РеквизитыФизическихЛиц Цикл
		СведенияОДолжностныхЛицах.Добавить(СведенияОДолжностномЛице(РеквизитыФизическогоЛица, ДляНалоговыхОрганов));
	КонецЦикла;
	
	Возврат СведенияОДолжностныхЛицах;
	
КонецФункции

Функция СведенияОДолжностномЛице(РеквизитыФизическогоЛица, ДляНалоговыхОрганов) // СвФЛТип
	
	ИНН = РеквизитыФизическогоЛица.ИННФЛ;
	СНИЛС = РеквизитыФизическогоЛица.СтраховойНомерПФР;
	Должность = РеквизитыФизическогоЛица.ДолжностьЛицаДоверителя;
	СведенияОФизическомЛице = СведенияОФизическомЛице(РеквизитыФизическогоЛица, ДляНалоговыхОрганов);
	
	СведенияОДолжностномЛице = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвФЛТип"));
	Если ЗначениеЗаполнено(ИНН) Тогда
		СведенияОДолжностномЛице.ИННФЛ = ИНН;
	КонецЕсли;
	Если ЗначениеЗаполнено(СНИЛС) Тогда
		СведенияОДолжностномЛице.СНИЛС = СНИЛС;
	КонецЕсли;
	Если ЗначениеЗаполнено(Должность) Тогда
		СведенияОДолжностномЛице.Должность = Должность;
	КонецЕсли;
	СведенияОДолжностномЛице.СведФЛ = СведенияОФизическомЛице;
	
	Возврат СведенияОДолжностномЛице;	
	
КонецФункции

Функция СведенияОПредставителях(Доверенность) // СвУпПредТип
	
	ДляНалоговыхОрганов = Доверенность.ДляНалоговыхОрганов;
	
	СведенияОПредставителях = Новый Массив;
	
	ОписанияПредставителей = Доверенность.Представители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", 
		Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
		
	Для Каждого ОписаниеПредставителя Из ОписанияПредставителей Цикл
		СведенияОПредставителе = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвУпПредТип"));
		Представитель = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ПредТип"));
		РеквизитыПредставителя = ОписаниеПредставителя.ПредставительРеквизиты.Получить();
		
		ОписанияЛицПредставителя = Доверенность.Представители.НайтиСтроки(
			Новый Структура("ИдентификаторРодителя", ОписаниеПредставителя.Идентификатор));
		
		РеквизитыЛицПредставителя = Новый Массив;
		РеквизитыЛицОрганизаций = Новый Соответствие;
		
		Для Каждого ОписаниеЛицаПредставителя Из ОписанияЛицПредставителя Цикл
			РеквизитыЛицаПредставителя = ОписаниеЛицаПредставителя.ПредставительРеквизиты.Получить();
			Если РеквизитыЛицаПредставителя.ЭтоФизическоеЛицо Тогда
				РеквизитыЛицПредставителя.Добавить(РеквизитыЛицаПредставителя);
			Иначе
				РеквизитыЛицОрганизации = Новый Массив;
				ОписанияЛицОрганизации = Доверенность.Представители.НайтиСтроки(
					Новый Структура("ИдентификаторРодителя", ОписаниеЛицаПредставителя.Идентификатор));
				РеквизитыЛицОрганизаций.Вставить(РеквизитыЛицаПредставителя, РеквизитыЛицОрганизации);
				Для Каждого ОписаниеЛицаОрганизации Из ОписанияЛицОрганизации Цикл
					РеквизитыЛицаОрганизации = ОписаниеЛицаОрганизации.ПредставительРеквизиты.Получить();
					РеквизитыЛицОрганизации.Добавить(РеквизитыЛицаОрганизации);
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
		
		Если РеквизитыПредставителя.ЭтоФизическоеЛицо Тогда
			ТипПредставителя = "3";
			СведенияОФизическомЛице = СведенияОДолжностномЛице(РеквизитыПредставителя, ДляНалоговыхОрганов);
			Представитель.СведФизЛ = СведенияОФизическомЛице;
		ИначеЕсли РеквизитыПредставителя.ЭтоИндивидуальныйПредприниматель Тогда
			ТипПредставителя = "2";
			СведенияОбИндивидуальномПредпринимателе = СведенияОбИндивидуальномПредпринимателе(РеквизитыПредставителя, РеквизитыЛицПредставителя, ДляНалоговыхОрганов);
			Представитель.СведИП = СведенияОбИндивидуальномПредпринимателе;
		ИначеЕсли РеквизитыПредставителя.ЭтоИностраннаяОрганизация Тогда
			ТипПредставителя = "5";
			СведенияОбИностранномЮридическомЛице = СведенияОбИностранномЮридическомЛице(РеквизитыПредставителя);
			Представитель.СведИО = СведенияОбИностранномЮридическомЛице;
		ИначеЕсли РеквизитыПредставителя.ЭтоФилиал Тогда
			ТипПредставителя = "4";
			СведенияОФилиалеЮридическогоЛица = СведенияОЮридическомЛице(РеквизитыПредставителя);
			Представитель.СведФилиал = СведенияОФилиалеЮридическогоЛица;
		Иначе
			ТипПредставителя = "1";
			СведенияОЮридическомЛице = СведенияОЮридическомЛице(РеквизитыПредставителя);
			Представитель.СведОрг = СведенияОЮридическомЛице;
		КонецЕсли;
		СведенияОПредставителе = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвУпПредТип"));
		СведенияОПредставителе.ТипПред = ТипПредставителя;
		СведенияОПредставителе.Пред = Представитель;
		СведенияОПредставителях.Добавить(СведенияОПредставителе);
	КонецЦикла;

	Возврат СведенияОПредставителях;
	
КонецФункции

Функция СведенияОПолномочияхПредставителей(Объект) // СвПолнТип
	
	ПолномочияВТекстовомВиде = Объект.ПолномочияВТекстовомВиде;
	ТипПолномочия = ?(ПолномочияВТекстовомВиде, "0", "1");
	ТекстовоеСодержаниеПолномочия = Объект.ТекстПолномочий;
	ПризнакСовместногоОсуществленияПолномочий = ?(Объект.СовместныеПолномочия, "2", "1");
	СведенияОМашиночитаемыхПолномочиях = СведенияОМашиночитаемыхПолномочиях(Объект);
	
	СведенияОПолномочияхПредставителей = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвПолнТип"));
	СведенияОПолномочияхПредставителей.ТипПолн = ТипПолномочия;
	СведенияОПолномочияхПредставителей.ПрСовмПолн = ПризнакСовместногоОсуществленияПолномочий;
	
	Если ПолномочияВТекстовомВиде Тогда
		СведенияОПолномочияхПредставителей.ТекстПолн = ТекстовоеСодержаниеПолномочия;
	Иначе
		Для Каждого СведенияОМашиночитаемомПолномочии Из СведенияОМашиночитаемыхПолномочиях Цикл
			СведенияОПолномочияхПредставителей.МашПолн.Добавить(СведенияОМашиночитаемомПолномочии);
		КонецЦикла;
	КонецЕсли;
	
	Возврат СведенияОПолномочияхПредставителей;
	
КонецФункции

Функция СведенияОМашиночитаемыхПолномочиях(Объект)

	СведенияОМашиночитаемыхПолномочиях = Новый Массив;
	
	Для Каждого ОписаниеПолномочия Из Объект.Полномочия Цикл
		КодПолномочия = ОписаниеПолномочия.Код;
		НаименованиеПолномочия = ОписаниеПолномочия.Наименование;
		Ограничения = Объект.Ограничения.НайтиСтроки(Новый Структура("ИдентификаторПолномочия", ОписаниеПолномочия.ИдентификаторПолномочия));
		СведенияОбОграниченияхКПолномочию = СведенияОбОграниченияхКПолномочию(Ограничения);
		
		СведенияОМашиночитаемомПолномочии = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "МашПолнТип"));
		СведенияОМашиночитаемомПолномочии.КодПолн = КодПолномочия;
		СведенияОМашиночитаемомПолномочии.НаимПолн = НаименованиеПолномочия;
		Для Каждого Элемент Из СведенияОбОграниченияхКПолномочию Цикл
			СведенияОМашиночитаемомПолномочии.ОгрСвПолн.Добавить(Элемент);
		КонецЦикла;
	
		СведенияОМашиночитаемыхПолномочиях.Добавить(СведенияОМашиночитаемомПолномочии);
	КонецЦикла;
	
	Возврат СведенияОМашиночитаемыхПолномочиях;
	
КонецФункции

Функция СведенияОбОграниченияхКПолномочию(Ограничения)
	
	СведенияОбОграниченияхКПолномочию = Новый Массив;
	
	Для Каждого Ограничение Из Ограничения Цикл
		ПорядковыйНомерОграничения = Ограничение.НомерСтроки;
		КодОграничения = Ограничение.Код;
		НаименованиеОграничения = Ограничение.Наименование;
		НаименованиеЗначенияДляОграничения = Ограничение.НаименованиеЗначения;
		КодЗначенияДляОграничения = Ограничение.КодЗначения;
		ТекстовоеЗначениеДляОграничения = Ограничение.ТекстовоеЗначение;
		
		СведенияОбОграниченииКПолномочию = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ОгрСвПолнТип"));
		СведенияОбОграниченииКПолномочию.ИдОгр = ПорядковыйНомерОграничения;
		СведенияОбОграниченииКПолномочию.КодОгр = КодОграничения;
		СведенияОбОграниченииКПолномочию.НаимОгр = НаименованиеОграничения;
		
		Если ЗначениеЗаполнено(КодЗначенияДляОграничения) Тогда
			СведенияОбОграниченииКПолномочию.НаимЗначОгр = НаименованиеЗначенияДляОграничения;
			СведенияОбОграниченииКПолномочию.КодЗначОгр = КодЗначенияДляОграничения;
		Иначе
			СведенияОбОграниченииКПолномочию.ТексЗначОгр = ТекстовоеЗначениеДляОграничения;
		КонецЕсли;
	
		СведенияОбОграниченияхКПолномочию.Добавить(СведенияОбОграниченииКПолномочию);
	КонецЦикла;
	
	Возврат СведенияОбОграниченияхКПолномочию;
	
КонецФункции

Функция СведенияОЮридическомЛице(РеквизитыОрганизации) // СвОргТип
	
	НаименованиеЮридическогоЛица = РеквизитыОрганизации.НаименованиеПолное;
	ИНН = РеквизитыОрганизации.ИНН;
	КПП = РеквизитыОрганизации.КПП;
	ОГРН = РеквизитыОрганизации.ОГРН;
	РегистрационныйНомерФилиала = "";
	Если РеквизитыОрганизации.ЭтоФилиал Тогда
		РегистрационныйНомерФилиала = РеквизитыОрганизации.РегистрационныйНомерФилиала; 
	КонецЕсли;
	НаименованиеУчредительногоДокумента = РеквизитыОрганизации.НаименованиеУчредительногоДокумента;
	КонтактныйТелефон = РеквизитыОрганизации.Телефон;
	АдресЭлектроннойПочты = РеквизитыОрганизации.ЭлектроннаяПочта;
	АдресЮридическогоЛица = СведенияОбАдресе(РеквизитыОрганизации.ЮридическийАдресЗначение);
	
	СведенияОЮридическомЛице = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвОргТип"));	
	СведенияОЮридическомЛице.НаимОрг = НаименованиеЮридическогоЛица;
	Если ЗначениеЗаполнено(ИНН) Тогда
		СведенияОЮридическомЛице.ИННЮЛ = ИНН;
	КонецЕсли;
	СведенияОЮридическомЛице.КПП = КПП;
	Если ЗначениеЗаполнено(ОГРН) Тогда
		СведенияОЮридическомЛице.ОГРН = ОГРН;
	КонецЕсли;
	Если ЗначениеЗаполнено(РегистрационныйНомерФилиала) Тогда
		СведенияОЮридическомЛице.РегНомер = РегистрационныйНомерФилиала;
	КонецЕсли;
	Если ЗначениеЗаполнено(НаименованиеУчредительногоДокумента) Тогда
		СведенияОЮридическомЛице.НаимУчрДок = НаименованиеУчредительногоДокумента;
	КонецЕсли;
	Если ЗначениеЗаполнено(КонтактныйТелефон) Тогда
		СведенияОЮридическомЛице.КонтактТлф = КонтактныйТелефон;
	КонецЕсли;
	Если ЗначениеЗаполнено(АдресЭлектроннойПочты) Тогда
		СведенияОЮридическомЛице.АдрЭлПочт = АдресЭлектроннойПочты;
	КонецЕсли;
	Если АдресЮридическогоЛица <> Неопределено Тогда
		СведенияОЮридическомЛице.АдрРег = АдресЮридическогоЛица;
	КонецЕсли;
	
	Возврат СведенияОЮридическомЛице;
	
КонецФункции

Функция СведенияОбАдресе(Адрес) // АдрТип
	
	Если Не ЗначениеЗаполнено(Адрес) Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	ПоляАдреса = РаботаСАдресами.СведенияОбАдресе(Адрес, Новый Структура("КодыАдреса", Истина));
	
	СубъектРоссийскойФедерации = ПоляАдреса.КодРегиона;
	ИдентификаторАдресаПоФИАС = ПоляАдреса.ИдентификаторАдресногоОбъекта;
	ФИАСАдресВРоссийскойФедерации = ПоляАдреса.МуниципальноеПредставление;
	АдресВРоссийскойФедерации = ПоляАдреса.Представление;
	
	СведенияОбАдресе = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "АдрТип"));
	СведенияОбАдресе.Регион = СубъектРоссийскойФедерации;
	Если ЗначениеЗаполнено(ПоляАдреса.ИдентификаторАдресногоОбъекта) Тогда
		СведенияОбАдресе.ИдФИАС = Строка(ИдентификаторАдресаПоФИАС);
		СведенияОбАдресе.ФИАСАдрРФ = ФИАСАдресВРоссийскойФедерации;
	Иначе
		СведенияОбАдресе.АдрРФ = АдресВРоссийскойФедерации;
	КонецЕсли;
	
	Возврат СведенияОбАдресе;
	
КонецФункции

Функция СведенияОДоверителеИностранногоЮридическогоЛица(РеквизитыОрганизации, РеквизитыФизическихЛиц, ДляНалоговыхОрганов) // ИнОргДоверТип
	
	СведенияОДоверителеИностранногоЮридическогоЛица = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ИнОргДоверТип"));
	
	СведенияОбИностранномЮридическомЛице = СведенияОбИностранномЮридическомЛице(РеквизитыОрганизации);
	СведенияОДоверителеИностранногоЮридическогоЛица.СвИнОрг = СведенияОбИностранномЮридическомЛице;

	Для Каждого РеквизитыФизическогоЛица Из РеквизитыФизическихЛиц Цикл
		СведенияОРуководителеИностранногоЮридическогоЛица = СведенияОДолжностномЛице(РеквизитыФизическогоЛица, ДляНалоговыхОрганов);
		СведенияОДоверителеИностранногоЮридическогоЛица.СвРукОП.Добавить(СведенияОРуководителеИностранногоЮридическогоЛица);
	КонецЦикла;
	
	Возврат СведенияОДоверителеИностранногоЮридическогоЛица;
	
КонецФункции

Функция СведенияОбИностранномЮридическомЛице(РеквизитыОрганизации) // СвИнОргТип

	НаименованиеОрганизации = РеквизитыОрганизации.НаименованиеПолное;
	ИННЮЛ = РеквизитыОрганизации.ИНН;
	КПП = РеквизитыОрганизации.КПП;
	НомерЗаписиОбАккредитации = РеквизитыОрганизации.НомерЗаписиОбАккредитации;
	СтранаРегистрации = РеквизитыОрганизации.СтранаРегистрацииКод;
	НаименованиеРегистрирующегоОргана = РеквизитыОрганизации.НаименованиеРегистрирующегоОргана;
	РегистрационныйНомерВСтранеРегистрации = РеквизитыОрганизации.РегистрационныйНомерВСтранеРегистрации;
	КодНалогоплательщикаВСтранеРегистрации = РеквизитыОрганизации.КодНалогоплательщикаВСтранеРегистрации;
	КонтактныйТелефон = РеквизитыОрганизации.Телефон;
	АдресЭлектроннойПочты = РеквизитыОрганизации.ЭлектроннаяПочта;
	ЮридическийАдресВСтранеРегистрации = РеквизитыОрганизации.ЮридическийАдресВСтранеРегистрации;
	ФактическийАдрес = СведенияОбАдресе(РеквизитыОрганизации.ФактическийАдресЗначение);
	
	СведенияОбИностранномЮридическомЛице = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвИнОргТип"));
	СведенияОбИностранномЮридическомЛице.НаимИО = НаименованиеОрганизации;
	Если ЗначениеЗаполнено(ИННЮЛ) Тогда
		СведенияОбИностранномЮридическомЛице.ИННЮЛ = ИННЮЛ;
	КонецЕсли;
	Если ЗначениеЗаполнено(КПП) Тогда
		СведенияОбИностранномЮридическомЛице.КПП = КПП;
	КонецЕсли;
	Если ЗначениеЗаполнено(НомерЗаписиОбАккредитации) Тогда
		СведенияОбИностранномЮридическомЛице.НЗА = НомерЗаписиОбАккредитации;
	КонецЕсли;
	Если ЗначениеЗаполнено(СтранаРегистрации) Тогда
		СведенияОбИностранномЮридическомЛице.СтрРег = СтранаРегистрации;
	КонецЕсли;
	Если ЗначениеЗаполнено(НаименованиеРегистрирующегоОргана) Тогда
		СведенияОбИностранномЮридическомЛице.НаимРегОрг = НаименованиеРегистрирующегоОргана;
	КонецЕсли;
	Если ЗначениеЗаполнено(РегистрационныйНомерВСтранеРегистрации) Тогда
		СведенияОбИностранномЮридическомЛице.РегНомер = РегистрационныйНомерВСтранеРегистрации;
	КонецЕсли;
	Если ЗначениеЗаполнено(КодНалогоплательщикаВСтранеРегистрации) Тогда
		СведенияОбИностранномЮридическомЛице.КодНПРег = КодНалогоплательщикаВСтранеРегистрации;
	КонецЕсли;
	Если ЗначениеЗаполнено(КонтактныйТелефон) Тогда
		СведенияОбИностранномЮридическомЛице.КонтактТлф = КонтактныйТелефон;
	КонецЕсли;
	Если ЗначениеЗаполнено(АдресЭлектроннойПочты) Тогда
		СведенияОбИностранномЮридическомЛице.АдрЭлПочт = АдресЭлектроннойПочты;
	КонецЕсли;
	Если ЗначениеЗаполнено(ЮридическийАдресВСтранеРегистрации) Тогда
		СведенияОбИностранномЮридическомЛице.АдрСтрРег = ЮридическийАдресВСтранеРегистрации;
	КонецЕсли;
	Если ФактическийАдрес <> Неопределено Тогда
		СведенияОбИностранномЮридическомЛице.АдрМНФакт = ФактическийАдрес;
	КонецЕсли;
	
	Возврат СведенияОбИностранномЮридическомЛице;

КонецФункции

Функция СведенияОбИндивидуальномПредпринимателе(РеквизитыОрганизации, РеквизитыФизическихЛиц, ДляНалоговыхОрганов) // СведИПТип
	
	РеквизитыФизическогоЛица = РеквизитыФизическихЛиц[0];
	
	ОГРНИП  = РеквизитыОрганизации.ОГРН;
	ИНН = РеквизитыОрганизации.ИНН;
	СНИЛС  = РеквизитыФизическогоЛица.СтраховойНомерПФР;
	СведенияОФизическомЛице = СведенияОФизическомЛице(РеквизитыФизическогоЛица, ДляНалоговыхОрганов);
	
	СведенияОбИндивидуальномПредпринимателе = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СведИПТип"));
	СведенияОбИндивидуальномПредпринимателе.ОГРНИП = ОГРНИП;
	СведенияОбИндивидуальномПредпринимателе.ИННФЛ = ИНН;
	СведенияОбИндивидуальномПредпринимателе.СНИЛС = СНИЛС;
	СведенияОбИндивидуальномПредпринимателе.СведФЛ = СведенияОФизическомЛице;
	
	Возврат СведенияОбИндивидуальномПредпринимателе;
	
КонецФункции

Функция СведенияОФизическомЛице(РеквизитыФизическогоЛица, ДляНалоговыхОрганов) // СведФЛТип
	
	Пол = РеквизитыФизическогоЛица.Пол;
	Если ЗначениеЗаполнено(РеквизитыФизическогоЛица.Гражданство) Тогда
		Если РеквизитыФизическогоЛица.Гражданство = Справочники.СтраныМира.Россия Тогда
			ПризнакНаличияГражданства = "1";
		Иначе
			ПризнакНаличияГражданства = "2";
		КонецЕсли;
		Гражданство = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РеквизитыФизическогоЛица.Гражданство, "Код");
	Иначе 
		ПризнакНаличияГражданства = "3";
		Гражданство = "";
	КонецЕсли;
	
	Если Не ДляНалоговыхОрганов Тогда
		ПризнакНаличияГражданства = "";
	КонецЕсли;
	
	НомерЗаписиЕдиногоРегистраНаселения = РеквизитыФизическогоЛица.НомерЗаписиЕдиногоРегистраНаселения;
	ДатаРождения = Неопределено;
	Если РеквизитыФизическогоЛица.Свойство("ДатаРождения") Тогда
		ДатаРождения = Формат(РеквизитыФизическогоЛица.ДатаРождения, "ДФ=yyyy-MM-dd;");
	КонецЕсли;
	МестоРождения = РеквизитыФизическогоЛица.МестоРождения; 
	КонтактныйТелефон = РеквизитыФизическогоЛица.Телефон; 
	АдресЭлектроннойПочты = РеквизитыФизическогоЛица.ЭлектроннаяПочта; 
	ФИОДоверителя = ФИОДоверителя(РеквизитыФизическогоЛица); 
	АдресМестаЖительства = Неопределено;
	Если ЗначениеЗаполнено(РеквизитыФизическогоЛица.АдресРегистрацииЗначение) Тогда
		АдресМестаЖительства = СведенияОбАдресе(РеквизитыФизическогоЛица.АдресРегистрацииЗначение); 
	КонецЕсли;
	СведенияОДокументеУдостоверяющемЛичность = СведенияОДокументеУдостоверяющемЛичность(РеквизитыФизическогоЛица);

	СведенияОФизическомЛице = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СведФЛТип"));
	
	СведенияОФизическомЛице.Пол = Пол;
	Если ЗначениеЗаполнено(ПризнакНаличияГражданства) Тогда
		СведенияОФизическомЛице.ПрГражд = ПризнакНаличияГражданства;
	КонецЕсли;
	Если ЗначениеЗаполнено(НомерЗаписиЕдиногоРегистраНаселения) Тогда
		СведенияОФизическомЛице.НомЕРН = НомерЗаписиЕдиногоРегистраНаселения;
	КонецЕсли;
	Если ЗначениеЗаполнено(ДатаРождения) Тогда
		СведенияОФизическомЛице.ДатаРожд = ДатаРождения;
	КонецЕсли;
	Если ЗначениеЗаполнено(МестоРождения) Тогда
		СведенияОФизическомЛице.МестоРожд = МестоРождения;
	КонецЕсли;
	Если ЗначениеЗаполнено(Гражданство) Тогда
		СведенияОФизическомЛице.Гражданство = Гражданство;
	КонецЕсли;
	Если ЗначениеЗаполнено(КонтактныйТелефон) Тогда
		СведенияОФизическомЛице.КонтактТлф = КонтактныйТелефон;
	КонецЕсли;
	Если ЗначениеЗаполнено(АдресЭлектроннойПочты) Тогда
		СведенияОФизическомЛице.АдрЭлПочт = АдресЭлектроннойПочты;
	КонецЕсли;
	СведенияОФизическомЛице.ФИО = ФИОДоверителя;
	Если АдресМестаЖительства <> Неопределено Тогда
		СведенияОФизическомЛице.АдрМЖ = АдресМестаЖительства;
	КонецЕсли;
	Если СведенияОДокументеУдостоверяющемЛичность <> Неопределено Тогда
		СведенияОФизическомЛице.УдЛичнФЛ = СведенияОДокументеУдостоверяющемЛичность;
	КонецЕсли;
	
	Возврат СведенияОФизическомЛице;
	
КонецФункции

Функция ФИОДоверителя(РеквизитыФизическогоЛица) // ФИОТип
	
	Фамилия = РеквизитыФизическогоЛица.Фамилия;
	Имя = РеквизитыФизическогоЛица.Имя;
	Отчество = РеквизитыФизическогоЛица.Отчество;
	
	ФИОДоверителя = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ФИОТип"));
	ФИОДоверителя.Фамилия = Фамилия;
	ФИОДоверителя.Имя = Имя;
	ФИОДоверителя.Отчество = Отчество;
	
	Возврат ФИОДоверителя;
	
КонецФункции

Функция СведенияОДокументеУдостоверяющемЛичность(РеквизитыФизическогоЛица) // УдЛичнФЛТип
	
	Если Не РеквизитыФизическогоЛица.Свойство("ДокументВид") Или РеквизитыФизическогоЛица.ДокументВид = "0" Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	КодВидаДокумента = РеквизитыФизическогоЛица.ДокументВид;
	СерияИНомерДокумента = РеквизитыФизическогоЛица.ДокументНомер;
	ДатаВыдачиДокумента = Формат(РеквизитыФизическогоЛица.ДокументДатаВыдачи, "ДФ=yyyy-MM-dd;");
	НаименованиеОрганаВыдавшегоДокумент = РеквизитыФизическогоЛица.ДокументКемВыдан;
	КодПодразделенияОрганаВыдавшегоДокумент = РеквизитыФизическогоЛица.ДокументКодПодразделения;
	ДатаИстеченияСрокаДействияДокумента = Формат(РеквизитыФизическогоЛица.ДокументСрокДействия, "ДФ=yyyy-MM-dd;");
	
	СведенияОДокументеУдостоверяющемЛичность = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "УдЛичнФЛТип"));
	СведенияОДокументеУдостоверяющемЛичность.КодВидДок = КодВидаДокумента;
	СведенияОДокументеУдостоверяющемЛичность.СерНомДок = СерияИНомерДокумента;
	СведенияОДокументеУдостоверяющемЛичность.ДатаДок = ДатаВыдачиДокумента;
	Если КодВидаДокумента <> "10" Или ЗначениеЗаполнено(НаименованиеОрганаВыдавшегоДокумент) Тогда
		СведенияОДокументеУдостоверяющемЛичность.ВыдДок = НаименованиеОрганаВыдавшегоДокумент;
	КонецЕсли;
	Если КодВидаДокумента <> "10" Или ЗначениеЗаполнено(КодПодразделенияОрганаВыдавшегоДокумент) Тогда
		СведенияОДокументеУдостоверяющемЛичность.КодВыдДок = КодПодразделенияОрганаВыдавшегоДокумент;
	КонецЕсли;
	Если КодВидаДокумента = "22" Тогда
		СведенияОДокументеУдостоверяющемЛичность.expDate = ДатаИстеченияСрокаДействияДокумента;
	КонецЕсли;
	
	Возврат СведенияОДокументеУдостоверяющемЛичность;
	
КонецФункции

Функция ФайлыДоверенностей(Доверенности, ДляНалоговыхОрганов) Экспорт
	
	ФайлыДоверенностей = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Доверенности, "ФайлДоверенности");
	
	Для Каждого Доверенность Из Доверенности Цикл
		ФайлыДоверенности = Новый Массив;
		ФайлДоверенности = ФайлыДоверенностей[Доверенность];
	
		Если ФайлДоверенности.Пустая() Тогда
			ФайлыДоверенностей[Доверенность] = ФайлыДоверенности;
			Продолжить;
		КонецЕсли;
		
		ДанныеФайла = РаботаСФайлами.ДанныеФайла(ФайлДоверенности);
		ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла);
		ДоверенностьXML = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные);
		РезультатЧтения = ПрочитатьИмяФайлаДоверенности(ДоверенностьXML, ДляНалоговыхОрганов);
		ИмяФайлаДоверенности = РезультатЧтения.ИмяФайлаДоверенности;
		ОписаниеОшибки = РезультатЧтения.ОписаниеОшибки;
		
		ОписаниеФайла = ОписаниеФайла();
		ОписаниеФайла.ИмяФайла = ИмяФайлаДоверенности;
		ОписаниеФайла.ТипФайла = "Доверенность";
		ОписаниеФайла.ДвоичныеДанные = ДвоичныеДанные;
		ОписаниеФайла.ОписаниеОшибки = ОписаниеОшибки;
		
		ФайлыДоверенности.Добавить(ОписаниеФайла);
		
		УстановленныеПодписи = ЭлектроннаяПодпись.УстановленныеПодписи(ФайлДоверенности);
		Для Каждого ФайлПодписи Из УстановленныеПодписи Цикл
			ОписаниеФайла = ОписаниеФайла();
			ИмяФайлаПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаПодписи(ИмяФайлаДоверенности, ФайлПодписи.КомуВыданСертификат, 
				ЭлектроннаяПодпись.ПерсональныеНастройки().РасширениеДляФайловПодписи);
			ОписаниеФайла.ИмяФайла = ИмяФайлаПодписи;
			ОписаниеФайла.ТипФайла = "Подпись";
			ОписаниеФайла.ДвоичныеДанные = ФайлПодписи.Подпись;
			
			ФайлыДоверенности.Добавить(ОписаниеФайла);
		КонецЦикла;
		ФайлыДоверенностей.Вставить(Доверенность, ФайлыДоверенности);
	КонецЦикла;
	
	Возврат ФайлыДоверенностей;
	
КонецФункции

// Возвращаемое значение:
//   Структура:
//   * ИмяФайла - Строка
//   * ТипФайла - Строка
//   * ДвоичныеДанные - ДвоичныеДанные
//
Функция ОписаниеФайла()
	
	ОписаниеФайла = Новый Структура;
	ОписаниеФайла.Вставить("ИмяФайла", "");
	ОписаниеФайла.Вставить("ТипФайла", "");
	ОписаниеФайла.Вставить("ДвоичныеДанные");
	ОписаниеФайла.Вставить("ОписаниеОшибки", "");
	
	Возврат ОписаниеФайла;
	
КонецФункции

// Параметры:
//  ДоверенностьXML - Строка
//
Функция ПрочитатьИмяФайлаДоверенности(Знач ДоверенностьXML, Знач ДляНалоговыхОрганов)
	
	ИмяФайлаДоверенности = "";
	ОписаниеОшибки = "";
		
	Доверенность = ДоверенностьXDTO(ДоверенностьXML);
	
	ИдентификаторФайла = Доверенность.ИдФайл;
	Если ДляНалоговыхОрганов Тогда
		ИдентификаторФайла = "";
		Если Доверенность.ИдФайлНО = Неопределено Тогда
			ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Доверенность %1 не предназначена для представления в налоговые органы.'"), ИдентификаторФайла);
		Иначе
			ИдентификаторФайла = Доверенность.ИдФайлНО;
		КонецЕсли;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
		ИмяФайлаДоверенности = ИдентификаторФайла + ".xml";
	КонецЕсли;
	
	Результат = Новый Структура;
	Результат.Вставить("ИмяФайлаДоверенности", ИмяФайлаДоверенности);
	Результат.Вставить("ОписаниеОшибки", ОписаниеОшибки);
	
	Возврат Результат;
	
КонецФункции

Функция ПечатьДоверенности(Доверенности, ОбъектыПечати, КодЯзыка)
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.КлючПараметровПечати = "МашиночитаемыеДоверенности_Доверенность";
	Макет = УправлениеПечатью.МакетПечатнойФормы("Справочник.МашиночитаемыеДоверенности.ПФ_MXL_Доверенность", КодЯзыка);
	
	ФайлыДоверенностей = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Доверенности, "ФайлДоверенности");
	
	Для Каждого Ссылка Из Доверенности Цикл
		ФайлДоверенности = ФайлыДоверенностей[Ссылка];
		Если ФайлДоверенности.Пустая() Тогда
			ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Печатная форма недоступна, потому что не заполнены все обязательные реквизиты доверенности.'"), Ссылка);
			Продолжить;
		КонецЕсли;
		
		ДанныеФайла = РаботаСФайлами.ДанныеФайла(ФайлДоверенности);
		ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла);
		ДоверенностьXML = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные);

		Доверенность = ДоверенностьXDTO(ДоверенностьXML);
		
		Если Доверенность.Документ.Передов = Неопределено Тогда
			ВывестиДоверенность(ТабличныйДокумент, Макет, Доверенность.Документ.Довер);
		Иначе
			ВывестиПередоверие(ТабличныйДокумент, Макет, Доверенность.Документ.Передов);
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат ТабличныйДокумент;
	
КонецФункции

Функция ДоверенностьXDTO(Знач ДоверенностьXML) Экспорт
	
	ДоверенностьXML = СтрЗаменить(ДоверенностьXML, """" + ЦелевоеПространствоИмен() + """",
		"""" + ИдентификаторСхемыМЧД() + """");
		
	ЧтениеXML = Новый ЧтениеXML();
	ЧтениеXML.УстановитьСтроку(ДоверенностьXML);
	ЧтениеXML.Прочитать();
	ДоверенностьXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ДоверенностьТип"));
	ЧтениеXML.Закрыть();
	
	Возврат ДоверенностьXDTO;
	
КонецФункции

Функция НаименованиеДокумента(КодВидаДокумента)
	
	ВидыДокументов = МашиночитаемыеДоверенностиФНССлужебный.ВидыДокументовУдостоверяющихЛичность();

	Для Каждого ВидДокумента Из ВидыДокументов.НайтиСтроки(Новый Структура("Код", КодВидаДокумента)) Цикл
		Возврат ВидДокумента.Наименование;
	КонецЦикла;
	
	Возврат НСтр("ru = 'Документ'");
	
КонецФункции

Функция РеквизитыЮридическогоЛица(СведенияОЮридическомЛице)
	
	НаименованиеЮридическогоЛица = СведенияОЮридическомЛице.НаимОрг;
	ИНН = СведенияОЮридическомЛице.ИННЮЛ;
	КПП = СведенияОЮридическомЛице.КПП;
	ОГРН = СведенияОЮридическомЛице.ОГРН;
	РегистрационныйНомерФилиала = СведенияОЮридическомЛице.РегНомер;
	НаименованиеУчредительногоДокумента = СведенияОЮридическомЛице.НаимУчрДок;
	
	КонтактныйТелефон = СведенияОЮридическомЛице.КонтактТлф;
	КонтактныйТелефонЗначение = КонтактнаяИнформацияПоПредставлению(КонтактныйТелефон, "Телефон");
	
	АдресЭлектроннойПочты = СведенияОЮридическомЛице.АдрЭлПочт;
	АдресЭлектроннойПочтыЗначение = КонтактнаяИнформацияПоПредставлению(АдресЭлектроннойПочты, "АдресЭлектроннойПочты");
	
	АдресЮридическогоЛица = СведенияОЮридическомЛице.АдрРег;
	ПредставлениеАдресаЮридическогоЛица = ПредставленияАдреса(АдресЮридическогоЛица);
	ЮридическийАдресЗначение = КонтактнаяИнформацияПоПредставлению(ПредставлениеАдресаЮридическогоЛица, "Адрес");
	
	Параметры = Новый Структура;
	Параметры.Вставить("НаименованиеЮридическогоЛица", НаименованиеЮридическогоЛица);
	Параметры.Вставить("ИНН", ИНН);
	Параметры.Вставить("КПП", КПП);
	Параметры.Вставить("ОГРН", ОГРН);
	Параметры.Вставить("РегистрационныйНомерФилиала", РегистрационныйНомерФилиала);
	Параметры.Вставить("НаименованиеУчредительногоДокумента", НаименованиеУчредительногоДокумента);
	
	Параметры.Вставить("КонтактныйТелефон", КонтактныйТелефон);
	Параметры.Вставить("КонтактныйТелефонЗначение", КонтактныйТелефонЗначение);
	
	Параметры.Вставить("АдресЭлектроннойПочты", АдресЭлектроннойПочты);
	Параметры.Вставить("АдресЭлектроннойПочтыЗначение", АдресЭлектроннойПочтыЗначение);
	
	Параметры.Вставить("ЮридическийАдрес", ПредставлениеАдресаЮридическогоЛица);
	Параметры.Вставить("ЮридическийАдресЗначение", ЮридическийАдресЗначение);
	
	Параметры.Вставить("НаименованиеПолное", Параметры.НаименованиеЮридическогоЛица);
	Параметры.Вставить("Телефон", Параметры.КонтактныйТелефон);
	Параметры.Вставить("ЭлектроннаяПочта", Параметры.АдресЭлектроннойПочты);

	Возврат Параметры;
	
КонецФункции

Функция РеквизитыДолжностногоЛица(СведенияОДолжностномЛице)
	
	ИНН = СведенияОДолжностномЛице.ИННФЛ;
	СНИЛС = СведенияОДолжностномЛице.СНИЛС;
	Должность = СведенияОДолжностномЛице.Должность;
	СведенияОФизическомЛице = СведенияОДолжностномЛице.СведФЛ;
	РеквизитыФизическогоЛица = РеквизитыФизическогоЛица(СведенияОФизическомЛице);
	
	Параметры = Новый Структура;
	Параметры.Вставить("ИНН", ИНН);
	Параметры.Вставить("ИННФЛ", ИНН);
	Параметры.Вставить("СНИЛС", СНИЛС);
	Параметры.Вставить("СтраховойНомерПФР", СНИЛС);
	Параметры.Вставить("Должность", Должность);
	Параметры.Вставить("ДолжностьЛицаДоверителя", Должность);
	
	Для Каждого Реквизит Из РеквизитыФизическогоЛица Цикл
		Параметры.Вставить(Реквизит.Ключ, Реквизит.Значение);
	КонецЦикла;	
	
	Возврат Параметры;
	
КонецФункции

Функция РеквизитыФизическогоЛицаДоверителя(СведенияОФизическомЛицеДоверителе)
	
	ИНН = СведенияОФизическомЛицеДоверителе.ИННФЛ;
	СНИЛС = СведенияОФизическомЛицеДоверителе.СНИЛС;
	СведенияОФизическомЛице = СведенияОФизическомЛицеДоверителе.СведФЛ;
	
	Параметры = Новый Структура;
	Параметры.Вставить("ИНН", ИНН);
	Параметры.Вставить("СНИЛС", СНИЛС);
	Параметры.Вставить("СведенияОФизическомЛице", СведенияОФизическомЛице);
	
	Возврат Параметры;
	
КонецФункции

Функция РеквизитыФизическогоЛица(СведенияОФизическомЛице)
	
	Пол = СведенияОФизическомЛице.Пол;
	ПризнакНаличияГражданства = СведенияОФизическомЛице.ПрГражд;
	НомерЗаписиЕдиногоРегистраНаселения = СведенияОФизическомЛице.НомЕРН;
	Если ЗначениеЗаполнено(СведенияОФизическомЛице.ДатаРожд) Тогда
		ДатаРождения = Дата(СведенияОФизическомЛице.ДатаРожд);
	КонецЕсли;
	МестоРождения = СведенияОФизическомЛице.МестоРожд;
	Гражданство = Справочники.СтраныМира.НайтиПоКоду(СведенияОФизическомЛице.Гражданство);
	
	КонтактныйТелефон = СведенияОФизическомЛице.КонтактТлф;
	КонтактныйТелефонЗначение = КонтактнаяИнформацияПоПредставлению(КонтактныйТелефон, "Телефон");
	
	АдресЭлектроннойПочты = СведенияОФизическомЛице.АдрЭлПочт;
	АдресЭлектроннойПочтыЗначение = КонтактнаяИнформацияПоПредставлению(АдресЭлектроннойПочты, "АдресЭлектроннойПочты");
	
	ФИОДоверителя = СведенияОФизическомЛице.ФИО;
	АдресМестаЖительства = СведенияОФизическомЛице.АдрМЖ;
	СведенияОДокументеУдостоверяющемЛичность = СведенияОФизическомЛице.УдЛичнФЛ;	
	
	Фамилия = ФИОДоверителя.Фамилия;
	Имя = ФИОДоверителя.Имя;
	Отчество = ФИОДоверителя.Отчество;
	
	ФИО = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		НСтр("ru = '%1 %2 %3'"),
		Фамилия, Имя, Отчество);
	
	КодВидаДокумента = Неопределено;
	СерияИНомерДокумента = Неопределено;
	ДатаВыдачиДокумента = Неопределено;
	НаименованиеОрганаВыдавшегоДокумент = Неопределено;
	КодПодразделенияОрганаВыдавшегоДокумент = Неопределено;
	ДатаИстеченияСрокаДействияДокумента = Неопределено;
	ДокументУдостоверяющийЛичность = "";
	
	Если СведенияОДокументеУдостоверяющемЛичность <> Неопределено Тогда
		КодВидаДокумента = СведенияОДокументеУдостоверяющемЛичность.КодВидДок;
		СерияИНомерДокумента = СведенияОДокументеУдостоверяющемЛичность.СерНомДок;
		ДатаВыдачиДокумента = Дата(СведенияОДокументеУдостоверяющемЛичность.ДатаДок);
		НаименованиеОрганаВыдавшегоДокумент = СведенияОДокументеУдостоверяющемЛичность.ВыдДок;
		КодПодразделенияОрганаВыдавшегоДокумент = СведенияОДокументеУдостоверяющемЛичность.КодВыдДок;
		ДатаИстеченияСрокаДействияДокумента = ?(СведенияОДокументеУдостоверяющемЛичность.expDate = Неопределено,
			'00010101', Дата(СведенияОДокументеУдостоверяющемЛичность.expDate));
	
		РеквизитыДокумента = Новый Массив;
		РеквизитыДокумента.Добавить(НаименованиеДокумента(КодВидаДокумента));
		РеквизитыДокумента.Добавить(СерияИНомерДокумента);
		РеквизитыДокумента.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'выдан %1'"),  Формат(Дата(ДатаВыдачиДокумента), "ДЛФ=D;")));
		Если ЗначениеЗаполнено(НаименованиеОрганаВыдавшегоДокумент) Тогда
			РеквизитыДокумента.Добавить(НаименованиеОрганаВыдавшегоДокумент);
		КонецЕсли;
		Если ЗначениеЗаполнено(КодПодразделенияОрганаВыдавшегоДокумент) Тогда
			РеквизитыДокумента.Добавить("(" + КодПодразделенияОрганаВыдавшегоДокумент + ")");
		КонецЕсли;
		Если ЗначениеЗаполнено(ДатаИстеченияСрокаДействияДокумента) Тогда
			РеквизитыДокумента.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'действителен до %1'"), Формат(Дата(ДатаИстеченияСрокаДействияДокумента), "ДЛФ=D;")));
		КонецЕсли;
	
		ДокументУдостоверяющийЛичность = СтрСоединить(РеквизитыДокумента, " ");
	КонецЕсли;
	
	АдресРегистрации = "";
	АдресРегистрацииЗначение = "";
	
	Если АдресМестаЖительства <> Неопределено Тогда
		АдресРегистрации = ПредставленияАдреса(АдресМестаЖительства);
		АдресРегистрацииЗначение = КонтактнаяИнформацияПоПредставлению(АдресРегистрации, "Адрес");
	КонецЕсли;
	
	Параметры = Новый Структура;

	Параметры.Вставить("Пол", Пол);
	Параметры.Вставить("ПризнакНаличияГражданства", ПризнакНаличияГражданства);
	Параметры.Вставить("НомерЗаписиЕдиногоРегистраНаселения", НомерЗаписиЕдиногоРегистраНаселения);
	Параметры.Вставить("ДатаРождения", ДатаРождения);
	Параметры.Вставить("МестоРождения", МестоРождения);
	Параметры.Вставить("Гражданство", Гражданство);
	Параметры.Вставить("КонтактныйТелефон", КонтактныйТелефон);
	Параметры.Вставить("Телефон", КонтактныйТелефон);
	Параметры.Вставить("ТелефонЗначение", КонтактныйТелефонЗначение);
	Параметры.Вставить("АдресЭлектроннойПочты", АдресЭлектроннойПочты);
	Параметры.Вставить("ЭлектроннаяПочта", АдресЭлектроннойПочты);
	Параметры.Вставить("ЭлектроннаяПочтаЗначение", АдресЭлектроннойПочтыЗначение);
	Параметры.Вставить("АдресРегистрации", АдресРегистрации);
	Параметры.Вставить("АдресРегистрацииЗначение", АдресРегистрацииЗначение);

	Параметры.Вставить("Фамилия", Фамилия);
	Параметры.Вставить("Имя", Имя);
	Параметры.Вставить("Отчество", Отчество);
	Параметры.Вставить("ФИО", ФИО);
	
	Параметры.Вставить("ДокументУдостоверяющийЛичность", ДокументУдостоверяющийЛичность);
	Параметры.Вставить("ДокументВид", КодВидаДокумента);
	Параметры.Вставить("ДокументДатаВыдачи", ДатаВыдачиДокумента);
	Параметры.Вставить("ДокументКемВыдан", НаименованиеОрганаВыдавшегоДокумент);
	Параметры.Вставить("ДокументКодПодразделения", КодПодразделенияОрганаВыдавшегоДокумент);
	Параметры.Вставить("ДокументНомер", СерияИНомерДокумента);
	Параметры.Вставить("ДокументСрокДействия", ДатаИстеченияСрокаДействияДокумента);
	
	Возврат Параметры;
	
КонецФункции

Функция РеквизитыИндивидуальногоПредпринимателя(СведенияОбИндивидуальномПредпринимателе)
	
	ОГРНИП = СведенияОбИндивидуальномПредпринимателе.ОГРНИП;
	ИНН = СведенияОбИндивидуальномПредпринимателе.ИННФЛ;
	СНИЛС = СведенияОбИндивидуальномПредпринимателе.СНИЛС;
	СведенияОФизическомЛице = СведенияОбИндивидуальномПредпринимателе.СведФЛ;
	
	РеквизитыФизическогоЛица = РеквизитыФизическогоЛица(СведенияОФизическомЛице);
	
	Параметры = Новый Структура;
	Параметры.Вставить("ОГРН", ОГРНИП);
	Параметры.Вставить("ИНН", ИНН);
	Параметры.Вставить("СНИЛС", СНИЛС);
	
	Параметры.Вставить("ИННФЛ", ИНН);
	Параметры.Вставить("СтраховойНомерПФР", СНИЛС);	
	
	Для Каждого Реквизит Из РеквизитыФизическогоЛица Цикл
		Параметры.Вставить(Реквизит.Ключ, Реквизит.Значение);
	КонецЦикла;
	
	НаименованиеПолное = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'ИП %1'"), Параметры.ФИО);
	Параметры.Вставить("НаименованиеПолное", НаименованиеПолное);
	
	Возврат Параметры;
	
КонецФункции

Функция РеквизитыИностранногоЮридическогоЛица(СведенияОбИностранномЮридическомЛице)
	
	НаименованиеОрганизации = СведенияОбИностранномЮридическомЛице.НаимИО;
	ИНН = СведенияОбИностранномЮридическомЛице.ИННЮЛ;
	КПП = СведенияОбИностранномЮридическомЛице.КПП;
	НомерЗаписиОбАккредитации = СведенияОбИностранномЮридическомЛице.НЗА;
	СтранаРегистрации = СведенияОбИностранномЮридическомЛице.СтрРег;
	НаименованиеРегистрирующегоОргана = СведенияОбИностранномЮридическомЛице.НаимРегОрг;
	РегистрационныйНомерВСтранеРегистрации = СведенияОбИностранномЮридическомЛице.РегНомер;
	КодНалогоплательщикаВСтранеРегистрации = СведенияОбИностранномЮридическомЛице.КодНПРег;
	КонтактныйТелефон = СведенияОбИностранномЮридическомЛице.КонтактТлф;
	АдресЭлектроннойПочты = СведенияОбИностранномЮридическомЛице.АдрЭлПочт;
	ЮридическийАдресВСтранеРегистрации = СведенияОбИностранномЮридическомЛице.АдрСтрРег;
	ФактическийАдрес = ПредставленияАдреса(СведенияОбИностранномЮридическомЛице.АдрМНФакт);
	
	Параметры = Новый Структура;
	Параметры.Вставить("НаименованиеОрганизации", НаименованиеОрганизации);
	Параметры.Вставить("НаименованиеПолное", НаименованиеОрганизации);
	Параметры.Вставить("ИНН", ИНН);
	Параметры.Вставить("КПП", КПП);
	Параметры.Вставить("НомерЗаписиОбАккредитации", НомерЗаписиОбАккредитации);
	Параметры.Вставить("СтранаРегистрации", Справочники.СтраныМира.НайтиПоКоду(СтранаРегистрации));
	Параметры.Вставить("СтранаРегистрацииКод", СтранаРегистрации);
	Параметры.Вставить("НаименованиеРегистрирующегоОргана", НаименованиеРегистрирующегоОргана);
	Параметры.Вставить("РегистрационныйНомерВСтранеРегистрации", РегистрационныйНомерВСтранеРегистрации);
	Параметры.Вставить("КодНалогоплательщикаВСтранеРегистрации", КодНалогоплательщикаВСтранеРегистрации);
	Параметры.Вставить("КонтактныйТелефон", КонтактныйТелефон);
	Параметры.Вставить("Телефон", КонтактныйТелефон);
	Параметры.Вставить("АдресЭлектроннойПочты", АдресЭлектроннойПочты);
	Параметры.Вставить("ЭлектроннаяПочта", АдресЭлектроннойПочты);
	Параметры.Вставить("ЮридическийАдресВСтранеРегистрации", ЮридическийАдресВСтранеРегистрации);
	Параметры.Вставить("ЮридическийАдрес", ЮридическийАдресВСтранеРегистрации);
	Параметры.Вставить("ФактическийАдрес", ФактическийАдрес);
	
	Возврат Параметры;
	
КонецФункции

Функция ПредставленияАдреса(СведенияОбАдресе)
	
	ФИАСАдресВРоссийскойФедерации = СведенияОбАдресе.ФИАСАдрРФ;
	АдресВРоссийскойФедерации = СведенияОбАдресе.АдрРФ;
	
	Если ФИАСАдресВРоссийскойФедерации <> Неопределено Тогда
		Возврат ФИАСАдресВРоссийскойФедерации;
	КонецЕсли;
	
	Возврат АдресВРоссийскойФедерации;
	
КонецФункции

Процедура ВывестиОбласть(ТабличныйДокумент, Макет, ИмяОбласти, Параметры = Неопределено)
	
	ОбластьМакета = Макет.ПолучитьОбласть(ИмяОбласти);
	Если ЗначениеЗаполнено(Параметры) Тогда
		ОбластьМакета.Параметры.Заполнить(Параметры);
	КонецЕсли;
	ТабличныйДокумент.Вывести(ОбластьМакета);
	
КонецПроцедуры

Процедура ВывестиОтступ(ТабличныйДокумент, Макет)
	
	ВывестиОбласть(ТабличныйДокумент, Макет, "Отступ");
	
КонецПроцедуры

Функция ЗагрузитьДоверенностиВИнформационнуюБазу(ЗагруженныеФайлы) Экспорт
	
	ФайлыДоверенностей = Новый Соответствие;
	ФайлыПодписей = Новый Соответствие;
	ФайлыZIP = Новый Соответствие;
	ДругиеФайлы = Новый Соответствие;
	
	Для Каждого ЗагруженныйФайл Из ЗагруженныеФайлы Цикл
		Файл = Новый Файл(ЗагруженныйФайл.ИмяФайла);
		
		Если НРег(Файл.Расширение) = ".xml" 
			И (СтрНачинаетсяС(Файл.Имя, "ON_EMCHD") Или СтрНачинаетсяС(Файл.Имя, "ON_DOVEL")) Тогда
			ФайлыДоверенностей.Вставить(ЗагруженныйФайл, Новый Массив);
		ИначеЕсли НРег(Файл.Расширение) = ".zip" Тогда
			ФайлыZIP.Вставить(ЗагруженныйФайл, Ложь);
		ИначеЕсли ЭтоФайлПодписи(Файл.Имя) Тогда
			ФайлыПодписей.Вставить(ЗагруженныйФайл, Ложь);
		Иначе
			ДругиеФайлы.Вставить(ЗагруженныйФайл, Ложь);
		КонецЕсли;
	КонецЦикла;

	ПодписиФайлов =  ПодписиФайлов(ЗагруженныеФайлы, ФайлыПодписей);
	СгруппироватьФайлыПоДоверенностям(ФайлыДоверенностей, ДругиеФайлы);
		
	Доверенности = Новый Массив;
	ТекстыОшибок = Новый Массив;
	
	Для Каждого Элемент Из ФайлыДоверенностей Цикл
		ЗагруженныйФайл = Элемент.Ключ;
		ПрисоединенныеФайлы = Элемент.Значение;
		ПодписиФайла = ПодписиФайлов[ЗагруженныйФайл];
		
		ИмяФайла = ЗагруженныйФайл.ИмяФайла;
		АдресФайла = ЗагруженныйФайл.Хранение;
		
		ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
		ДоверенностьXML = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные);
		
		Попытка
			ОписаниеДоверенности = ДоверенностьXDTO(ДоверенностьXML);
		Исключение
			ИнформацияОбОшибке = ИнформацияОбОшибке();
			ТекстыОшибок.Добавить(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
			Продолжить;
		КонецПопытки;
		
		Если ОписаниеДоверенности.Документ.Передов = Неопределено Тогда
			ЕдиныйРегистрационныйНомер = ОписаниеДоверенности.Документ.Довер.СвДов.НомДовер;
		Иначе
			ЕдиныйРегистрационныйНомер = ОписаниеДоверенности.Документ.Передов.СвПереДовер.НомДовер;
		КонецЕсли;
		
		//@skip-check query-in-loop - штучные запросы в количестве загружаемых доверенностей
		Доверенность = НайтиДоверенность(ЕдиныйРегистрационныйНомер);
		
		Если Доверенность <> Неопределено Тогда
			Доверенности.Добавить(Доверенность);
			ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Машиночитаемая доверенность с номером %1 уже существует, загрузка из файла %2 не выполнена.'"),
				ЕдиныйРегистрационныйНомер,
				ИмяФайла);
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Доверенность);
			Продолжить;
		КонецЕсли;

		Объект = СоздатьЭлемент();
		ЭтоПередоверие = ОписаниеДоверенности.Документ.Довер = Неопределено;
		
		Если ЭтоПередоверие Тогда
			//@skip-check query-in-loop - штучные запросы в количестве загружаемых доверенностей
			ЗаполнитьПередовериеИзОбъектаXDTO(Объект, ОписаниеДоверенности);
		Иначе
			ЗаполнитьДоверенность(Объект, ОписаниеДоверенности);
		КонецЕсли;
		
		Доверенность = ПолучитьСсылку(Новый УникальныйИдентификатор);
		Объект.УстановитьСсылкуНового(Доверенность);
		Доверенности.Добавить(Доверенность);
		
		Файл = Новый Файл(ИмяФайла);

		ПараметрыДобавленияФайла = РаботаСФайлами.ПараметрыДобавленияФайла();
 		ПараметрыДобавленияФайла.ВладелецФайлов = Доверенность;
		ПараметрыДобавленияФайла.ИмяБезРасширения = Файл.ИмяБезРасширения;
		ПараметрыДобавленияФайла.РасширениеБезТочки = Сред(Файл.Расширение, 2);
		
		НачатьТранзакцию();
		Попытка
			Объект.ФайлДоверенности = РаботаСФайлами.ДобавитьФайл(ПараметрыДобавленияФайла, АдресФайла);

			ДобавитьПодписи(Объект.ФайлДоверенности, ПодписиФайла, Доверенность);
			ДобавитьДополнительныеФайлы(Доверенность, ПрисоединенныеФайлы, ПодписиФайлов);
			
			Объект.Записать();
			ЗафиксироватьТранзакцию();
		Исключение
			ОтменитьТранзакцию();
			ВызватьИсключение;
		КонецПопытки;
		
		РегистрыСведений.МашиночитаемыеДоверенностиСтатусы.ОбновлениеСтатусовМЧД(Объект.Ссылка);
		РезультатПроверкиДоверенности = МашиночитаемыеДоверенностиФНССлужебный.РезультатПроверкиПодписейДоверенности(Объект.Ссылка);
		Если РезультатПроверкиДоверенности.ЕстьВсеПодписи Тогда
			МашиночитаемыеДоверенностиФНССлужебный.РассчитатьТехническийСтатус(Объект.Ссылка, РезультатПроверкиДоверенности.ЕстьВсеПодписи);
		КонецЕсли;
	КонецЦикла;
	
	Результат = Новый Структура;
	Результат.Вставить("Доверенности", Доверенности);
	Результат.Вставить("ТекстОшибки", СтрСоединить(ТекстыОшибок, Символы.ПС + Символы.ПС));
	
	Возврат Результат;
	
КонецФункции

Процедура СгруппироватьФайлыПоДоверенностям(ФайлыДоверенностей, ДругиеФайлы)

	Для Каждого Элемент Из ДругиеФайлы Цикл
		ЗагруженныйФайл = Элемент.Ключ;
		ВладелецФайлаОпределен = Элемент.Значение;
		
		Если ВладелецФайлаОпределен Тогда
			Продолжить;
		КонецЕсли;
		
		Для Каждого ГруппаФайлов Из ФайлыДоверенностей Цикл
			ФайлДоверенности = ГруппаФайлов.Ключ;
			ПрисоединенныеФайлы = ГруппаФайлов.Значение;
			
			Файл = Новый Файл(ФайлДоверенности.ИмяФайла);
			Если СтрНайти(ЗагруженныйФайл.ИмяФайла, Файл.ИмяБезРасширения) Тогда
				ПрисоединенныеФайлы.Добавить(ЗагруженныйФайл);
				ДругиеФайлы[ЗагруженныйФайл] = Истина;
				Прервать;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
КонецПроцедуры

Функция ПодписиФайлов(ЗагруженныеФайлы, ФайлыПодписей)
	
	ПодписиФайлов = Новый Соответствие;
	
	Для Каждого ЗагруженныйФайл Из ЗагруженныеФайлы Цикл
		Если ФайлыПодписей[ЗагруженныйФайл] <> Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		Файл = Новый Файл(ЗагруженныйФайл.ИмяФайла);
		НайденныеПодписи = Новый Массив;
		
		Для Каждого Элемент Из ФайлыПодписей Цикл
			ФайлПодписи = Элемент.Ключ;
			ПодписываемыйФайлОпределен = Элемент.Значение;
			
			Если ПодписываемыйФайлОпределен Тогда
				Продолжить;
			КонецЕсли;
			
			Если СтрНачинаетсяС(ФайлПодписи.ИмяФайла, Файл.ИмяБезРасширения) Тогда
				НайденныеПодписи.Добавить(ФайлПодписи);
				ФайлыПодписей[ФайлПодписи] = Истина;
			КонецЕсли;
		КонецЦикла;
		
		ПодписиФайлов[ЗагруженныйФайл] = НайденныеПодписи;
		
	КонецЦикла;
		
	Возврат ПодписиФайлов;
	
КонецФункции

Процедура ДобавитьПодписи(Файл, ПодписиФайла, Доверенность)
	
	Для Каждого ПодписьФайла Из ПодписиФайла Цикл
		ИмяФайла = ПодписьФайла.ИмяФайла;
		АдресФайла = ПодписьФайла.Хранение;
		
		ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
		ПодписьВКодировкеDER = ЭлектроннаяПодпись.ПодписьВКодировкеDER(ДвоичныеДанные);
		СвойстваПодписи = ЭлектроннаяПодпись.СвойстваПодписи(ПодписьВКодировкеDER);
		
		Если СвойстваПодписи.Успех <> Ложь Тогда
			НовыеСвойстваПодписи = ЭлектроннаяПодписьКлиентСервер.НовыеСвойстваПодписи();
			ЗаполнитьЗначенияСвойств(НовыеСвойстваПодписи, СвойстваПодписи);
			НовыеСвойстваПодписи.Подпись = ПодписьВКодировкеDER;
			НовыеСвойстваПодписи.ТребуетсяПроверка = Истина;
			ЭлектроннаяПодпись.ДобавитьПодпись(Файл, НовыеСвойстваПодписи);
		Иначе
			ДобавитьПрисоединенныйФайл(Доверенность, ИмяФайла, АдресФайла);
		КонецЕсли;
	КонецЦикла;
		
КонецПроцедуры

Процедура ДобавитьДополнительныеФайлы(Доверенность, ДополнительныеФайлы, ПодписиФайлов)
	
	Для Каждого ЗагруженныйФайл Из ДополнительныеФайлы Цикл
		ИмяФайла = ЗагруженныйФайл.ИмяФайла;
		АдресФайла = ЗагруженныйФайл.Хранение;
		
		ПрисоединенныйФайл = ДобавитьПрисоединенныйФайл(Доверенность, ИмяФайла, АдресФайла);
		
		ПодписиФайла = ПодписиФайлов[ЗагруженныйФайл];
		ДобавитьПодписи(ПрисоединенныйФайл, ПодписиФайла, Доверенность);
	КонецЦикла;
	
КонецПроцедуры

Функция ЭтоФайлПодписи(ИмяФайла)
	
	Файл = Новый Файл(ИмяФайла);
	Возврат Файл.Расширение = ".p7s" Или Файл.Расширение = ".sig";
	
КонецФункции

Функция ДобавитьПрисоединенныйФайл(Владелец, ИмяФайла, АдресФайла)
	
	Файл = Новый Файл(ИмяФайла);

	ПараметрыДобавленияФайла = РаботаСФайлами.ПараметрыДобавленияФайла();
	ПараметрыДобавленияФайла.ВладелецФайлов = Владелец;
	ПараметрыДобавленияФайла.ИмяБезРасширения = Файл.ИмяБезРасширения;
	ПараметрыДобавленияФайла.РасширениеБезТочки = Сред(Файл.Расширение, 2);
	
	Возврат РаботаСФайлами.ДобавитьФайл(ПараметрыДобавленияФайла, АдресФайла);
	
КонецФункции

Процедура ЗаполнитьДоверенность(Объект, ОписаниеДоверенности)
	
	ВерсияФормата = ОписаниеДоверенности.ВерсФорм;
	ФлагОбязательностиЭлементов = ОписаниеДоверенности.ПрЭлФорм;
	ИныеСведения = ОписаниеДоверенности.ИнСвед;
	Документ = ОписаниеДоверенности.Документ;
	
	Доверенность = Документ.Довер;
	
	СведенияОДоверенности = Доверенность.СвДов;
	СведенияОДоверителях = Доверенность.СвДоверит;
	СведенияОПредставителях = Доверенность.СвУпПред;
	СведенияОПолномочияхПредставителей = Доверенность.СвПолн;	
	
	ЕдиныйРегистрационныйНомер = СведенияОДоверенности.НомДовер;
	ДатаВыдачиДоверенности = Дата(СведенияОДоверенности.ДатаВыдДовер);
	СрокДействияДоверенности = Дата(СведенияОДоверенности.СрокДейст);
	ПризнакВозможностиПередоверия = СведенияОДоверенности.ПрПередов;
	
	Если ПризнакВозможностиПередоверия = "2" Тогда
		Объект.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.ОднократноеПередоверие;
	ИначеЕсли ПризнакВозможностиПередоверия = "3" Тогда
		Объект.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.МногократноеПередоверие;
	Иначе
		Объект.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.БезПередоверия;
	КонецЕсли;
	
	КодНалоговогоОрганаПредставления = СведенияОДоверенности.КодНО;
	
	Объект.ДляНалоговыхОрганов = Сред(ФлагОбязательностиЭлементов, 4, 1) = "1";
	Объект.ВерсияФормата = ВерсияФормата;
	Объект.ИныеСведения = ИныеСведения;
	
	Объект.НомерДоверенности = ЕдиныйРегистрационныйНомер;
	Объект.ДатаВыдачи = ДатаВыдачиДоверенности;
	Объект.ДатаОкончания = СрокДействияДоверенности;
	Объект.КодНалоговогоОрганаПредставления = КодНалоговогоОрганаПредставления;
	
	Для Каждого СведенияОДоверителе Из СведенияОДоверителях Цикл
		ТипДоверителя = СведенияОДоверителе.ТипДоверит;
		Доверитель = СведенияОДоверителе.Доверит;
		
		Если ТипДоверителя = "1" Тогда
			СведенияОДоверителеЮридическогоЛица = Доверитель.РосОргДовер;
			СведенияОЮридическомЛице = СведенияОДоверителеЮридическогоЛица.СвРосОрг;
			ОрганизацияДоверитель = ДобавитьОрганизациюДоверителя(Объект, Неопределено, СведенияОЮридическомЛице);
			СведенияОЛицахДоверителя = СведенияОДоверителеЮридическогоЛица.ЛицоБезДов;
			
			Для Каждого СведенияОЛицеДоверителя Из СведенияОЛицахДоверителя Цикл
				
				СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании = СведенияОЛицеДоверителя.СВЮЛ;
				СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе = СведенияОЛицеДоверителя.СвИП;
				СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя = СведенияОЛицеДоверителя.СвФЛ;
				
				Если СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании <> Неопределено Тогда
					СведенияОЮридическомЛице = СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании.СвЮЛЕИО;
					СведенияОДолжностныхЛицах = СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании.СвФЛ;
					
					УправляющаяКомпания = ДобавитьОрганизациюДоверителя(
						Объект, ОрганизацияДоверитель, СведенияОЮридическомЛице);
					
					Для Каждого СведенияОДолжностномЛице Из СведенияОДолжностныхЛицах Цикл
						ДобавитьДолжностноеЛицоДоверителя(Объект, УправляющаяКомпания, СведенияОДолжностномЛице);
					КонецЦикла;
				КонецЕсли;
				
				Если СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе <> Неопределено Тогда
					ДобавитьИндивидуальногоПредпринимателяДоверителя(Объект, ОрганизацияДоверитель,
						 СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе)
				КонецЕсли;
				
				Если СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя <> Неопределено Тогда
					ДобавитьДолжностноеЛицоДоверителя(Объект, ОрганизацияДоверитель,
						СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя);
				КонецЕсли;
				
			КонецЦикла;
			
		ИначеЕсли ТипДоверителя = "2" Тогда
			
			СведенияОДоверителеИностранногоЮридическогоЛица = Доверитель.ИнОргДовер;
			СведенияОбИностранномЮридическомЛице = СведенияОДоверителеИностранногоЮридическогоЛица.СвИнОрг;
			СведенияОРуководителяхИностранногоЮридическогоЛица = СведенияОДоверителеИностранногоЮридическогоЛица.СвРукОП;
			
			Организация = ДобавитьИностранноеЮридическоеЛицоДоверителя(Объект, СведенияОбИностранномЮридическомЛице);
			
			Для Каждого СведенияОРуководителеИностранногоЮридическогоЛица Из СведенияОРуководителяхИностранногоЮридическогоЛица Цикл
				ДобавитьДолжностноеЛицоДоверителя(Объект, Организация, СведенияОРуководителеИностранногоЮридическогоЛица);
			КонецЦикла;
			
		ИначеЕсли ТипДоверителя = "3" Тогда
			
			СведенияОбИндивидуальномПредпринимателе = Доверитель.ИПДовер;
			ДобавитьИндивидуальногоПредпринимателяДоверителя(Объект, Неопределено, СведенияОбИндивидуальномПредпринимателе);
			
		ИначеЕсли ТипДоверителя = "4" Тогда
			
			СведенияОФизическомЛицеДоверителе = Доверитель.ФЛДовер;
			ДобавитьФизическоеЛицоДоверителя(Объект, СведенияОФизическомЛицеДоверителе);
			
		КонецЕсли;
		
	КонецЦикла;
	
	Для Каждого СведенияОПредставителе Из СведенияОПредставителях Цикл
		ТипПредставителя = СведенияОПредставителе.ТипПред;
		Представитель = СведенияОПредставителе.Пред;
		
		Если ТипПредставителя = "1" Тогда
			СведенияОЮридическомЛице = Представитель.СведОрг;
			ДобавитьОрганизациюПредставителя(Объект, Неопределено, СведенияОЮридическомЛице);
		ИначеЕсли ТипПредставителя = "2" Тогда
			СведенияОбИндивидуальномПредпринимателе = Представитель.СведИП;
			ДобавитьИндивидуальногоПредпринимателяПредставителя(Объект, Неопределено, СведенияОбИндивидуальномПредпринимателе);
		ИначеЕсли ТипПредставителя = "3" Тогда
			СведенияОФизическомЛице = Представитель.СведФизЛ;
			ДобавитьДолжностноеЛицоПредставителя(Объект, Неопределено, СведенияОФизическомЛице);
		ИначеЕсли ТипПредставителя = "4" Тогда
			СведенияОФилиалеЮридическогоЛица = Представитель.СведФилиал;
			ДобавитьОрганизациюПредставителя(Объект, Неопределено, СведенияОФилиалеЮридическогоЛица);
		ИначеЕсли ТипПредставителя = "5" Тогда
			СведенияОбИностранномЮридическомЛице = Представитель.СведИО;
			ДобавитьИностранноеЮридическоеЛицоПредставителя(Объект, СведенияОбИностранномЮридическомЛице);
		КонецЕсли;
	КонецЦикла;
	
	ТипПолномочия = СведенияОПолномочияхПредставителей.ТипПолн;
	ПризнакСовместногоОсуществленияПолномочий = СведенияОПолномочияхПредставителей.ПрСовмПолн;
	СведенияОМашиночитаемыхПолномочиях = СведенияОПолномочияхПредставителей.МашПолн;
	ТекстовоеСодержаниеПолномочия = СведенияОПолномочияхПредставителей.ТекстПолн;
	
	Объект.СовместныеПолномочия = ПризнакСовместногоОсуществленияПолномочий = "2";
	
	Если ТипПолномочия = "0" Тогда
		Полномочие = Объект.Полномочия.Добавить();
		Полномочие.Наименование = ТекстовоеСодержаниеПолномочия;
	ИначеЕсли ТипПолномочия = "1" Тогда
		Для Каждого СведенияОМашиночитаемомПолномочии Из СведенияОМашиночитаемыхПолномочиях Цикл
			КодПолномочия = СведенияОМашиночитаемомПолномочии.КодПолн;
			НаименованиеПолномочия = СведенияОМашиночитаемомПолномочии.НаимПолн;
			
			Полномочие = Объект.Полномочия.Добавить();
			Полномочие.Наименование = НаименованиеПолномочия;
			Полномочие.Код = КодПолномочия;
			Полномочие.ИдентификаторПолномочия = Новый УникальныйИдентификатор;
			
			СведенияОбОграниченияхКПолномочию = СведенияОМашиночитаемомПолномочии.ОгрСвПолн;
			Для Каждого СведенияОбОграниченииКПолномочию Из СведенияОбОграниченияхКПолномочию Цикл
				КодОграничения = СведенияОбОграниченииКПолномочию.КодОгр;
				НаименованиеОграничения = СведенияОбОграниченииКПолномочию.НаимОгр;
				НаименованиеЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.НаимЗначОгр;
				КодЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.КодЗначОгр;
				ТекстовоеЗначениеДляОграничения = СведенияОбОграниченииКПолномочию.ТексЗначОгр;
				
				Ограничение = Объект.Ограничения.Добавить();
				Ограничение.ИдентификаторПолномочия = Полномочие.ИдентификаторПолномочия;
				Ограничение.Код = КодОграничения;
				Ограничение.Наименование = НаименованиеОграничения;
				Ограничение.КодЗначения = КодЗначенияДляОграничения;
				Ограничение.НаименованиеЗначения = НаименованиеЗначенияДляОграничения;
				Ограничение.ТекстовоеЗначение = ТекстовоеЗначениеДляОграничения;
			КонецЦикла;
		КонецЦикла;
	КонецЕсли;
	
	КодыНалоговыхОргановДействия = СведенияОДоверенности.КодНОДейст;
	Для Каждого КодНалоговогоОрганаДействия Из КодыНалоговыхОргановДействия Цикл
		НалоговыйОрган = Объект.НалоговыеОрганыДействия.Добавить();
		НалоговыйОрган.КодНалоговогоОргана = КодНалоговогоОрганаДействия;
	КонецЦикла;

КонецПроцедуры

Функция ВидУчастникаРоссийскаяОрганизация()
	
	Возврат "РоссийскаяОрганизация";
	
КонецФункции

Функция ВидУчастникаИндивидуальныйПредприниматель()
	
	Возврат "ИндивидуальныйПредприниматель";
	
КонецФункции

Функция ВидУчастникаИностраннаяОрганизация()
	
	Возврат "ИностраннаяОрганизация";
	
КонецФункции

Функция ВидУчастникаДолжностноеЛицо()
	
	Возврат "ДолжностноеЛицо";
	
КонецФункции

Функция ТипЭлементаФизическоеЛицо()
	
	Возврат "ФизическоеЛицо";
	
КонецФункции

Функция ТипЭлементаОрганизация()
	
	Возврат "Организация";
	
КонецФункции

Функция ДобавитьОрганизациюДоверителя(Объект, СвязаннаяОрганизация, СведенияОЮридическомЛице)
	
	Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
	
	РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
		ТипЭлементаОрганизация(), Неопределено, ВидУчастникаРоссийскаяОрганизация());
	
	ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры);
	
	Доверитель = Объект.Доверители.Добавить();
	Доверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника);
	Доверитель.Идентификатор = Новый УникальныйИдентификатор;
	
	Если СвязаннаяОрганизация = Неопределено Тогда
		Доверитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
	Иначе
		Доверитель.ИдентификаторРодителя = СвязаннаяОрганизация.Идентификатор;
	КонецЕсли;
	
	Возврат Доверитель;
	
КонецФункции

Функция ДобавитьОрганизациюПредставителя(Объект, СвязаннаяОрганизация, СведенияОЮридическомЛице)
	
	Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
	
	РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
		ТипЭлементаОрганизация(), Неопределено, ВидУчастникаРоссийскаяОрганизация());
	
	ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры);
	
	Представитель = Объект.Представители.Добавить();
	Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника);
	Представитель.Идентификатор = Новый УникальныйИдентификатор;
	
	Если СвязаннаяОрганизация = Неопределено Тогда
		Представитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
	Иначе
		Представитель.ИдентификаторРодителя = СвязаннаяОрганизация.Идентификатор;
	КонецЕсли;
	
	Возврат Представитель;
	
КонецФункции

Процедура ДобавитьДолжностноеЛицоДоверителя(Объект, СвязаннаяОрганизация, СведенияОДолжностномЛице)
	
	Параметры = РеквизитыДолжностногоЛица(СведенияОДолжностномЛице);
	
	РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
		ТипЭлементаФизическоеЛицо(), Неопределено, ВидУчастникаДолжностноеЛицо());
		
	ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры);
	
	Доверитель = Объект.Доверители.Добавить();
	Доверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника);
	Доверитель.ИдентификаторРодителя = СвязаннаяОрганизация.Идентификатор;
	Доверитель.Идентификатор = Новый УникальныйИдентификатор;	
	Доверитель.ЭтоФизЛицо = Истина;
	
КонецПроцедуры

Процедура ДобавитьДолжностноеЛицоПредставителя(Объект, СвязаннаяОрганизация, СведенияОДолжностномЛице)
	
	Параметры = РеквизитыДолжностногоЛица(СведенияОДолжностномЛице);
	
	ВидУчастника = ?(СвязаннаяОрганизация = Неопределено, Неопределено, ВидУчастникаДолжностноеЛицо());
	РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
		ТипЭлементаФизическоеЛицо(), Неопределено, ВидУчастника);
		
	ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры);
	
	Представитель = Объект.Представители.Добавить();
	Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника);
	
	Если СвязаннаяОрганизация = Неопределено Тогда
		Представитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
	Иначе
		Представитель.ИдентификаторРодителя = СвязаннаяОрганизация.Идентификатор;
	КонецЕсли;
	
	Представитель.Идентификатор = Новый УникальныйИдентификатор;	
	
КонецПроцедуры

Функция ДобавитьФизическоеЛицоДоверителя(Объект, СведенияОФизическомЛицеДоверителе)
	
	Параметры = РеквизитыФизическогоЛицаДоверителя(СведенияОФизическомЛицеДоверителе);
	
	РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
		ТипЭлементаФизическоеЛицо(), Неопределено);
	
	ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры);
	
	Доверитель = Объект.Доверители.Добавить();
	Доверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника);
	Доверитель.Идентификатор = Новый УникальныйИдентификатор;
	Доверитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
	Доверитель.ЭтоФизЛицо = Истина;
	
	Возврат Доверитель;
	
КонецФункции

Функция ДобавитьИндивидуальногоПредпринимателяДоверителя(Объект, СвязаннаяОрганизация, СведенияОбИндивидуальномПредпринимателе)
	
	Параметры = РеквизитыИндивидуальногоПредпринимателя(СведенияОбИндивидуальномПредпринимателе);
	
	РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
		ТипЭлементаОрганизация(), Неопределено, ВидУчастникаИндивидуальныйПредприниматель());
		
	ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры);
	
	ДоверительОрганизация = Объект.Доверители.Добавить();
	ДоверительОрганизация.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника);
	
	Если СвязаннаяОрганизация = Неопределено Тогда
		ДоверительОрганизация.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
	Иначе
		ДоверительОрганизация.ИдентификаторРодителя = СвязаннаяОрганизация.Идентификатор;
	КонецЕсли;
	
	ДоверительОрганизация.Идентификатор = Новый УникальныйИдентификатор;	
	
	
	РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
		ТипЭлементаФизическоеЛицо(), Неопределено);
		
	ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры);
	
	ДоверительФизическоеЛицо = Объект.Доверители.Добавить();
	ДоверительФизическоеЛицо.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника);
	ДоверительФизическоеЛицо.ИдентификаторРодителя = ДоверительОрганизация.Идентификатор;
	ДоверительФизическоеЛицо.Идентификатор = Новый УникальныйИдентификатор;
	
	Возврат ДоверительОрганизация;
	
КонецФункции

Функция ДобавитьИндивидуальногоПредпринимателяПредставителя(Объект, СвязаннаяОрганизация, СведенияОбИндивидуальномПредпринимателе)
	
	Параметры = РеквизитыИндивидуальногоПредпринимателя(СведенияОбИндивидуальномПредпринимателе);
	
	РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
		ТипЭлементаФизическоеЛицо(), Неопределено, ВидУчастникаИндивидуальныйПредприниматель());
		
	ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры);
	
	Представитель = Объект.Представители.Добавить();
	Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника);
	
	Если СвязаннаяОрганизация = Неопределено Тогда
		Представитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
	Иначе
		Представитель.ИдентификаторРодителя = СвязаннаяОрганизация.Идентификатор;
	КонецЕсли;
	
	Представитель.Идентификатор = Новый УникальныйИдентификатор;	
	
	Возврат Представитель;
	
КонецФункции

Функция ДобавитьИностранноеЮридическоеЛицоДоверителя(Объект, СведенияОбИностранномЮридическомЛице)
	
	Параметры = РеквизитыИностранногоЮридическогоЛица(СведенияОбИностранномЮридическомЛице);
	
	РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
		ТипЭлементаОрганизация(), Неопределено, ВидУчастникаИностраннаяОрганизация());
		
	ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры);

	Доверитель = Объект.Доверители.Добавить();
	Доверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника);
	Доверитель.Идентификатор = Новый УникальныйИдентификатор;
	Доверитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
	
	Возврат Доверитель;
	
КонецФункции

Процедура ДобавитьИностранноеЮридическоеЛицоПредставителя(Объект, СведенияОбИностранномЮридическомЛице)
	
	Параметры = РеквизитыИностранногоЮридическогоЛица(СведенияОбИностранномЮридическомЛице);
	
	РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
		ТипЭлементаОрганизация(), Неопределено, ВидУчастникаИностраннаяОрганизация());
		
	ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры);

	Представитель = Объект.Представители.Добавить();
	Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника);
	Представитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
	Представитель.Идентификатор = Новый УникальныйИдентификатор;	
	
КонецПроцедуры

Функция АвтоНаименование(Объект) Экспорт
	
	НаименованиеДоверитель = "";
	НаименованиеОрганизацияДоверитель = "";
	НаименованиеПредставитель = "";
	
	Для Каждого Строка Из Объект.Доверители Цикл
		
		РеквизитыДоверителя = Строка.ДоверительРеквизиты.Получить();
		ЭтоФизическоеЛицо = РеквизитыДоверителя.ЭтоФизическоеЛицо;
		
		Если Не ЭтоФизическоеЛицо И НаименованиеОрганизацияДоверитель = "" Тогда
			НаименованиеОрганизацияДоверитель = ?(ЗначениеЗаполнено(РеквизитыДоверителя.НаименованиеСокращенное), 
				РеквизитыДоверителя.НаименованиеСокращенное, РеквизитыДоверителя.НаименованиеПолное);
		ИначеЕсли ЭтоФизическоеЛицо И НаименованиеДоверитель = "" Тогда
			НаименованиеДоверитель = ПросклонятьФИО(РеквизитыДоверителя.Фамилия, РеквизитыДоверителя.Имя,
				РеквизитыДоверителя.Отчество, РеквизитыДоверителя.Пол, 2);
		КонецЕсли; 
		
	КонецЦикла;
	
	Для Каждого Строка Из Объект.Представители Цикл
		
		РеквизитыПредставителя = Строка.ПредставительРеквизиты.Получить();
		
		Если НаименованиеПредставитель = "" Тогда
			Если Не РеквизитыПредставителя.ЭтоФизическоеЛицо Тогда
				НаименованиеПредставитель = ?(ЗначениеЗаполнено(РеквизитыПредставителя.НаименованиеСокращенное), 
					РеквизитыПредставителя.НаименованиеСокращенное, РеквизитыПредставителя.НаименованиеПолное);
			Иначе
				НаименованиеПредставитель = ПросклонятьФИО(РеквизитыПредставителя.Фамилия, РеквизитыПредставителя.Имя,
					РеквизитыПредставителя.Отчество, РеквизитыПредставителя.Пол, 3);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		НСтр("ru='%1 от %2 %3'"), НаименованиеПредставитель, НаименованиеДоверитель,
		?(ПустаяСтрока(НаименованиеОрганизацияДоверитель), "", "(" + НаименованиеОрганизацияДоверитель + ")"));
	
	Если ПустаяСтрока(Наименование) Тогда
		Наименование = НСтр("ru='Новая доверенность'");
	КонецЕсли;
	
	Возврат Наименование;
	
КонецФункции

Функция ПросклонятьФИО(Знач Фамилия, Знач Имя, Знач Отчество, Знач Пол, Знач Падеж)
	
	Если Не ЗначениеЗаполнено(Фамилия) Тогда
		Возврат "";
	КонецЕсли;
	
	Пол = ?(ЗначениеЗаполнено(Пол), Число(Пол), Неопределено);
	ФамилияСклонение = СклонениеПредставленийОбъектов.ПросклонятьФИО(Фамилия, Падеж, , Пол);
	СтруктураФИО = Новый Структура("Фамилия, Имя, Отчество", ФамилияСклонение, Имя, Отчество);
	ФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(СтруктураФИО);
	
	Возврат ФИО;
	
КонецФункции

Функция КонтактнаяИнформацияПоПредставлению(Представление, ТипКонтактнойИнформации)
	
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
		МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией");
		ОжидаемыйВид = МодульУправлениеКонтактнойИнформацией.ТипКонтактнойИнформацииПоНаименованию(ТипКонтактнойИнформации);
		Возврат МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(Представление, ОжидаемыйВид);
	КонецЕсли;
	
	Возврат "";
	
КонецФункции

Функция НайтиДоверенность(ЕдиныйРегистрационныйНомер)
	
	ТекстЗапроса =
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
	|	МашиночитаемыеДоверенности.Ссылка
	|ИЗ
	|	Справочник.МашиночитаемыеДоверенности КАК МашиночитаемыеДоверенности
	|ГДЕ
	|	МашиночитаемыеДоверенности.НомерДоверенности = &НомерДоверенности
	|	И НЕ МашиночитаемыеДоверенности.ПометкаУдаления";
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.УстановитьПараметр("НомерДоверенности", ЕдиныйРегистрационныйНомер);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Возврат Выборка.Ссылка;
	КонецЕсли;
	
	Возврат Неопределено
	
КонецФункции

Функция Передоверие(Объект)
	
	СведенияОПервоначальнойДоверенности = СведенияОПервоначальнойДоверенности(Объект.РодительскаяДоверенность);
	СведенияОДоверенностиОснованииПередоверия = СведенияОДоверенностиОснованииПередоверия(Объект.РодительскаяДоверенность);
	ПризнакНаличияДоверенностиВыданнойВПорядкеПередоверия = ?(СведенияОДоверенностиОснованииПередоверия = Неопределено, "0", "1");
	СведенияОДоверенности = СведенияОДоверенности(Объект);
	СведенияОЛицахПередавшихПолномочия = СведенияОЛицахПередавшихПолномочия(Объект);
	СведенияОЛицахПолучившихПолномочия = СведенияОПредставителях(Объект);
	СведенияОПередаваемыхПолномочиях = СведенияОПолномочияхПредставителей(Объект);
	
	Передоверие = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ПередовТип"));
	Передоверие.ПрНалПередов = ПризнакНаличияДоверенностиВыданнойВПорядкеПередоверия;
	Передоверие.СвПервДовер = СведенияОПервоначальнойДоверенности;
	Если СведенияОДоверенностиОснованииПередоверия <> Неопределено Тогда
		Передоверие.СвПередов = СведенияОДоверенностиОснованииПередоверия;
	КонецЕсли;
	Передоверие.СвПереДовер = СведенияОДоверенности;
	Для Каждого СведенияОЛицеПередавшемПолномочия Из СведенияОЛицахПередавшихПолномочия Цикл
		Передоверие.СвПередПолн.Добавить(СведенияОЛицеПередавшемПолномочия);
	КонецЦикла;
	Для Каждого СведенияОЛицеПолучившемПолномочия Из СведенияОЛицахПолучившихПолномочия Цикл
		Передоверие.СвПолучПолн.Добавить(СведенияОЛицеПолучившемПолномочия);
	КонецЦикла;
	Передоверие.СвПолн = СведенияОПередаваемыхПолномочиях;
	
	Возврат Передоверие;
	
КонецФункции

Функция СведенияОПервоначальнойДоверенности(ДоверенностьСсылка) // СвПервДоверТип
	
	ДоверенностьXDTO = ДоверенностьXDTOПоСсылке(ДоверенностьСсылка);
	
	Если ДоверенностьXDTO = Неопределено Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	ПризнакДоверенности = "1";
	ФормаДоверенности = "1";
	ЭтоПервичнаяДоверенность = ДоверенностьXDTO.Документ.Передов = Неопределено;
	
	Если ЭтоПервичнаяДоверенность Тогда
		Доверенность = ДоверенностьXDTO.Документ.Довер;
		
		СведенияОДоверенности = Доверенность.СвДов;
		СведенияОДоверителях = Доверенность.СвДоверит;

		ЕдиныйРегистрационныйНомерПервоначальнойДоверенности = СведенияОДоверенности.НомДовер;
		ДатаВыдачиДоверенности = Дата(СведенияОДоверенности.ДатаВыдДовер);
		СрокДействияДоверенности = Дата(СведенияОДоверенности.СрокДейст);
		ВнутреннийНомерПервоначальнойДоверенности = СведенияОДоверенности.ВнНомДовер;

		СведенияОДоверителяхПервоначальнойДоверенности = СведенияОДоверителяхПервоначальнойДоверенности(СведенияОДоверителях);
	Иначе
		Передоверие = ДоверенностьXDTO.Документ.Передов;
		СведенияОПервоначальнойДоверенности = Передоверие.СвПервДовер;
		
		ДатаВыдачиДоверенности = СведенияОПервоначальнойДоверенности.ДатаВыдДовер;
		СрокДействияДоверенности = СведенияОПервоначальнойДоверенности.СрокДейст;
		ВнутреннийНомерПервоначальнойДоверенности = СведенияОПервоначальнойДоверенности.ВнНомДоверПерв;
		ЕдиныйРегистрационныйНомерПервоначальнойДоверенности = СведенияОПервоначальнойДоверенности.НомДоверПерв;
		СведенияОДоверителяхПервоначальнойДоверенности = СведенияОПервоначальнойДоверенности.СвДоверПерв;
	КонецЕсли;
	
	СведенияОПервоначальнойДоверенности = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвПервДоверТип"));
	СведенияОПервоначальнойДоверенности.ПрДовер = ПризнакДоверенности;
	СведенияОПервоначальнойДоверенности.ФормДовер = ФормаДоверенности;
	СведенияОПервоначальнойДоверенности.ДатаВыдДовер = ДатаВыдачиДоверенности;
	СведенияОПервоначальнойДоверенности.СрокДейст = СрокДействияДоверенности;
	
	СведенияОПервоначальнойДоверенности.ВнНомДоверПерв = ВнутреннийНомерПервоначальнойДоверенности;
	СведенияОПервоначальнойДоверенности.НомДоверПерв = ЕдиныйРегистрационныйНомерПервоначальнойДоверенности;
	Для Каждого СведенияОДоверителеПервоначальнойДоверенности Из СведенияОДоверителяхПервоначальнойДоверенности Цикл
		СведенияОПервоначальнойДоверенности.СвДоверПерв.Добавить(СведенияОДоверителеПервоначальнойДоверенности);
	КонецЦикла;
	
	Возврат СведенияОПервоначальнойДоверенности;
	
КонецФункции

Функция СведенияОДоверенностиОснованииПередоверия(ДоверенностьСсылка)

	ДоверенностьXDTO = ДоверенностьXDTOПоСсылке(ДоверенностьСсылка);
	
	Если ДоверенностьXDTO = Неопределено Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	ПризнакДоверенности = "2";
	ФормаДоверенности = "1"; 
	ВнутреннийНомерДоверенностиОснования = "";
	ЕдиныйРегистрационныйНомерДоверенностиОснования = "";
	ЭтоПервичнаяДоверенность = ДоверенностьXDTO.Документ.Передов = Неопределено;
	
	Если ЭтоПервичнаяДоверенность Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	Передоверие = ДоверенностьXDTO.Документ.Передов;
	СведенияОДоверенности = Передоверие.СвПереДовер;

	ЕдиныйРегистрационныйНомерДоверенностиОснования = СведенияОДоверенности.НомДовер;
	ДатаВыдачиДоверенности = Дата(СведенияОДоверенности.ДатаВыдДовер);
	СрокДействияДоверенности = Дата(СведенияОДоверенности.СрокДейст);
	ВнутреннийНомерДоверенностиОснования = СведенияОДоверенности.ВнНомДовер;

	СведенияОПервоначальнойДоверенности = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвПервДоверТип"));
	СведенияОПервоначальнойДоверенности.ПрДовер = ПризнакДоверенности;
	СведенияОПервоначальнойДоверенности.ФормДовер = ФормаДоверенности;
	СведенияОПервоначальнойДоверенности.ДатаВыдДовер = ДатаВыдачиДоверенности;
	СведенияОПервоначальнойДоверенности.СрокДейст = СрокДействияДоверенности;
	СведенияОПервоначальнойДоверенности.ВнНомДоверN = ВнутреннийНомерДоверенностиОснования;
	СведенияОПервоначальнойДоверенности.НомДоверN = ЕдиныйРегистрационныйНомерДоверенностиОснования;
	
	Возврат СведенияОПервоначальнойДоверенности;

КонецФункции

Функция СведенияОЛицахПередавшихПолномочия(Доверенность)

	ДляНалоговыхОрганов = Доверенность.ДляНалоговыхОрганов;
	СведенияОЛицахПередавшихПолномочия = Новый Массив;
	
	ОписанияДоверителей = Доверенность.Доверители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", 
		Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
		
	Для Каждого ОписаниеДоверителя Из ОписанияДоверителей Цикл
		СведенияОЛицеПередавшемПолномочия = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвПередПолнТип"));	
		ЛицоПередавшееПолномочия = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ПередПолнТип"));	
		РеквизитыДоверителя = ОписаниеДоверителя.ДоверительРеквизиты.Получить();
		ОписанияЛицДоверителя = Доверенность.Доверители.НайтиСтроки(
			Новый Структура("ИдентификаторРодителя", ОписаниеДоверителя.Идентификатор));
		
		РеквизитыЛицДоверителя = Новый Массив;
		РеквизитыЛицУправляющихКомпаний = Новый Соответствие;
		Для Каждого ОписаниеЛицаДоверителя Из ОписанияЛицДоверителя Цикл
			РеквизитыЛицаДоверителя = ОписаниеЛицаДоверителя.ДоверительРеквизиты.Получить();
			Если РеквизитыЛицаДоверителя.ЭтоФизическоеЛицо Тогда
				РеквизитыЛицДоверителя.Добавить(РеквизитыЛицаДоверителя);
			Иначе
				РеквизитыЛицУправляющейКомпании = Новый Массив;
				ОписанияЛицУправляющейКомпании = Доверенность.Доверители.НайтиСтроки(
					Новый Структура("ИдентификаторРодителя", ОписаниеЛицаДоверителя.Идентификатор));
				РеквизитыЛицУправляющихКомпаний.Вставить(РеквизитыЛицаДоверителя, РеквизитыЛицУправляющейКомпании);
				Для Каждого ОписаниеЛицаУправляющейКомпании Из ОписанияЛицУправляющейКомпании Цикл
					РеквизитыЛицаУправляющейКомпании = ОписаниеЛицаУправляющейКомпании.ДоверительРеквизиты.Получить();
					РеквизитыЛицУправляющейКомпании.Добавить(РеквизитыЛицаУправляющейКомпании);
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
		
		ТипЛицаПередавшегоПолномочия = Неопределено;
		
		ДоверителемЯвляетсяФизическоеЛицо = РеквизитыДоверителя.ЭтоФизическоеЛицо;
		Если ДоверителемЯвляетсяФизическоеЛицо Тогда 
			ТипЛицаПередавшегоПолномочия = "3";
			СведенияОФизическомЛицеПередавшемПолномочия = СведенияОФизическомЛицеПередавшемПолномочия(РеквизитыДоверителя, ДляНалоговыхОрганов);
			ЛицоПередавшееПолномочия.ФЛПерПолн = СведенияОФизическомЛицеПередавшемПолномочия;
		Иначе
			Если РеквизитыДоверителя.ЭтоИностраннаяОрганизация Тогда
				ТипЛицаПередавшегоПолномочия = "5";
				СведенияОбИностранномЮридическомЛице = СведенияОДоверителеИностранногоЮридическогоЛица(РеквизитыДоверителя, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				ЛицоПередавшееПолномочия.ИнПерПолн = СведенияОбИностранномЮридическомЛице;
			ИначеЕсли РеквизитыДоверителя.ЭтоИндивидуальныйПредприниматель Тогда
				ТипЛицаПередавшегоПолномочия = "2";
				СведенияОбИндивидуальномПредпринимателе = СведенияОбИндивидуальномПредпринимателе(РеквизитыДоверителя, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				ЛицоПередавшееПолномочия.ИППерПолн = СведенияОбИндивидуальномПредпринимателе;
			ИначеЕсли РеквизитыДоверителя.ЭтоФилиал Тогда
				ТипЛицаПередавшегоПолномочия = "4";
				СведенияОФилиалеЮридическогоЛица = СведенияОФилиалеЮридическогоЛица(РеквизитыДоверителя, РеквизитыЛицУправляющихКомпаний, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				ЛицоПередавшееПолномочия.ФилПерПолн = СведенияОФилиалеЮридическогоЛица;
			Иначе
				ТипЛицаПередавшегоПолномочия = "1";
				СведенияОДоверителеЮридическогоЛица = СведенияОДоверителеЮридическогоЛица(РеквизитыДоверителя, РеквизитыЛицУправляющихКомпаний, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				ЛицоПередавшееПолномочия.РосОргПерПолн = СведенияОДоверителеЮридическогоЛица;
			КонецЕсли;
		КонецЕсли;
		
		Если ТипЛицаПередавшегоПолномочия <> Неопределено Тогда
			СведенияОЛицеПередавшемПолномочия.ТипПерПолн = ТипЛицаПередавшегоПолномочия;
			СведенияОЛицеПередавшемПолномочия.ПередПолн = ЛицоПередавшееПолномочия;
			СведенияОЛицахПередавшихПолномочия.Добавить(СведенияОЛицеПередавшемПолномочия);
		КонецЕсли;		
	
	КонецЦикла;
	
	Возврат СведенияОЛицахПередавшихПолномочия;

КонецФункции

Функция ДоверенностьXDTOПоСсылке(ДоверенностьСсылка)
	
	ФайлДоверенности = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДоверенностьСсылка, "ФайлДоверенности");
	
	Если ФайлДоверенности.Пустая() Тогда
		Возврат Неопределено;
	КонецЕсли;

	ДанныеФайла = РаботаСФайлами.ДанныеФайла(ФайлДоверенности);
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла);
	ДоверенностьXML = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные);
	ДоверенностьXDTO = ДоверенностьXDTO(ДоверенностьXML);
	
	Возврат ДоверенностьXDTO;
	
КонецФункции

Функция СведенияОДоверителяхПервоначальнойДоверенности(СведенияОДоверителях) // СвДоверПервТип

	СведенияОДоверителяхПервоначальнойДоверенности = Новый Массив;
	
	Для Каждого СведенияОДоверителе Из СведенияОДоверителях Цикл
		ТипДоверителя = СведенияОДоверителе.ТипДоверит;
		Доверитель = СведенияОДоверителе.Доверит;
		
		ДоверительПервоначальнойДоверенности  = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ДоверитПервТип"));
		
		Если ТипДоверителя = "1" Тогда
			ДоверительПервоначальнойДоверенности.РосОргДовер = Доверитель.РосОргДовер.СвРосОрг;
		ИначеЕсли ТипДоверителя = "2" Тогда
			ДоверительПервоначальнойДоверенности.ИнОргДовер = Доверитель.ИнОргДовер.СвИнОрг;
		ИначеЕсли ТипДоверителя = "3" Тогда
			ДоверительПервоначальнойДоверенности.ИПДовер = Доверитель.ИПДовер;
		ИначеЕсли ТипДоверителя = "4" Тогда
			ДоверительПервоначальнойДоверенности.ФЛДовер = Доверитель.ФЛДовер;
		КонецЕсли;
		
		СведенияОДоверителеПервоначальнойДоверенности = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвДоверПервТип"));
		СведенияОДоверителеПервоначальнойДоверенности.ТипДоверит = ТипДоверителя;
		СведенияОДоверителеПервоначальнойДоверенности.ДоверитПерв = ДоверительПервоначальнойДоверенности;
		
		СведенияОДоверителяхПервоначальнойДоверенности.Добавить(СведенияОДоверителеПервоначальнойДоверенности);
	КонецЦикла;
	
	Возврат СведенияОДоверителяхПервоначальнойДоверенности;
	
КонецФункции

Функция СведенияОФизическомЛицеПередавшемПолномочия(РеквизитыФизическогоЛица, ДляНалоговыхОрганов) // ФЛПерПолн
	
	ИНН = РеквизитыФизическогоЛица.ИНН;
	СНИЛС = РеквизитыФизическогоЛица.СНИЛС;
	СведенияОФизическомЛице = СведенияОФизическомЛице(РеквизитыФизическогоЛица, ДляНалоговыхОрганов);
	
	СведенияОФизическомЛицеПередавшемПолномочия = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ФЛПерПолн"));
	Если ЗначениеЗаполнено(ИНН) Тогда
		СведенияОФизическомЛицеПередавшемПолномочия.ИННФЛ = ИНН;
	КонецЕсли;
	СведенияОФизическомЛицеПередавшемПолномочия.СНИЛС = СНИЛС;
	СведенияОФизическомЛицеПередавшемПолномочия.СведФЛ = СведенияОФизическомЛице;
	
	Возврат СведенияОФизическомЛицеПередавшемПолномочия;
	
КонецФункции

Функция СведенияОФилиалеЮридическогоЛица(РеквизитыОрганизации, РеквизитыУправляющихКомпаний, РеквизитыФизическихЛиц, ДляНалоговыхОрганов) // ФилПерПолн
	
	СведенияОФилиалеЮридическогоЛица = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ФилПерПолнТип"));
	СведенияОФилиалеЮридическогоЛица.СвФил = СведенияОЮридическомЛице(РеквизитыОрганизации);
	
	Для Каждого РеквизитыФизическогоЛица Из РеквизитыФизическихЛиц Цикл
		СведенияОФилиалеЮридическогоЛица.СвРукФил = СведенияОДолжностномЛице(РеквизитыФизическогоЛица, ДляНалоговыхОрганов);
		Прервать;
	КонецЦикла;
	
	Возврат СведенияОФилиалеЮридическогоЛица;
	
КонецФункции

Процедура ЗаполнитьПередовериеИзОбъектаXDTO(Объект, ОписаниеДоверенности)
	
	ВерсияФормата = ОписаниеДоверенности.ВерсФорм;
	ФлагОбязательностиЭлементов = ОписаниеДоверенности.ПрЭлФорм;
	ИныеСведения = ОписаниеДоверенности.ИнСвед;
	Документ = ОписаниеДоверенности.Документ;
	
	Передоверие = Документ.Передов;

	СведенияОПервоначальнойДоверенности = Передоверие.СвПервДовер;
	СведенияОДоверенностиОснованииПередоверия = Передоверие.СвПередов;
	СведенияОДоверенности = Передоверие.СвПереДовер;
	СведенияОЛицахПередавшихПолномочия = Передоверие.СвПередПолн;
	СведенияОЛицахПолучившихПолномочия = Передоверие.СвПолучПолн;
	СведенияОПередаваемыхПолномочиях = Передоверие.СвПолн;

	НомерДоверенностиОснования = СведенияОПервоначальнойДоверенности.НомДоверПерв;
	Если СведенияОДоверенностиОснованииПередоверия <> Неопределено Тогда
		НомерДоверенностиОснования = СведенияОДоверенностиОснованииПередоверия.НомДоверN;
	КонецЕсли;
	
	Объект.РодительскаяДоверенность = НайтиДоверенность(НомерДоверенностиОснования);
	Объект.РодительскаяДоверенностьНомер = НомерДоверенностиОснования;
	
	ЕдиныйРегистрационныйНомер = СведенияОДоверенности.НомДовер;
	ДатаВыдачиДоверенности = Дата(СведенияОДоверенности.ДатаВыдДовер);
	СрокДействияДоверенности = Дата(СведенияОДоверенности.СрокДейст);
	ПризнакВозможностиПередоверия = СведенияОДоверенности.ПрПередов;
	
	Если ПризнакВозможностиПередоверия = "2" Тогда
		Объект.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.ОднократноеПередоверие;
	ИначеЕсли ПризнакВозможностиПередоверия = "3" Тогда
		Объект.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.МногократноеПередоверие;
	Иначе
		Объект.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.БезПередоверия;
	КонецЕсли;
	
	КодНалоговогоОрганаПредставления = СведенияОДоверенности.КодНО;
	
	Объект.ДляНалоговыхОрганов = Сред(ФлагОбязательностиЭлементов, 4, 1) = "1";
	Объект.ВерсияФормата = ВерсияФормата;
	Объект.ИныеСведения = ИныеСведения;
	
	Объект.НомерДоверенности = ЕдиныйРегистрационныйНомер;
	Объект.ДатаВыдачи = ДатаВыдачиДоверенности;
	Объект.ДатаОкончания = СрокДействияДоверенности;
	Объект.КодНалоговогоОрганаПредставления = КодНалоговогоОрганаПредставления;
	
	Для Каждого СведенияОЛицеПередавшемПолномочия Из СведенияОЛицахПередавшихПолномочия Цикл
		
		ТипЛицаПередавшегоПолномочия = СведенияОЛицеПередавшемПолномочия.ТипПерПолн;
		ЛицоПередавшееПолномочия = СведенияОЛицеПередавшемПолномочия.ПередПолн;
		
		Если ТипЛицаПередавшегоПолномочия = "1" Тогда
			СведенияОДоверителеЮридическогоЛица = ЛицоПередавшееПолномочия.РосОргПерПолн;
			СведенияОЮридическомЛице = СведенияОДоверителеЮридическогоЛица.СвРосОрг;
			ОрганизацияДоверитель = ДобавитьОрганизациюДоверителя(Объект, Неопределено, СведенияОЮридическомЛице);
			СведенияОЛицахДоверителя = СведенияОДоверителеЮридическогоЛица.ЛицоБезДов;
			
			Для Каждого СведенияОЛицеДоверителя Из СведенияОЛицахДоверителя Цикл
				
				СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании = СведенияОЛицеДоверителя.СВЮЛ;
				СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе = СведенияОЛицеДоверителя.СвИП;
				СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя = СведенияОЛицеДоверителя.СвФЛ;
				
				Если СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании <> Неопределено Тогда
					СведенияОЮридическомЛице = СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании.СвЮЛЕИО;
					СведенияОДолжностныхЛицах = СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании.СвФЛ;
					
					УправляющаяКомпания = ДобавитьОрганизациюДоверителя(
						Объект, ОрганизацияДоверитель, СведенияОЮридическомЛице);
					
					Для Каждого СведенияОДолжностномЛице Из СведенияОДолжностныхЛицах Цикл
						ДобавитьДолжностноеЛицоДоверителя(Объект, УправляющаяКомпания, СведенияОДолжностномЛице);
					КонецЦикла;
				КонецЕсли;
				
				Если СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе <> Неопределено Тогда
					ДобавитьИндивидуальногоПредпринимателяДоверителя(Объект, ОрганизацияДоверитель,
						 СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе)
				КонецЕсли;
				
				Если СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя <> Неопределено Тогда
					ДобавитьДолжностноеЛицоДоверителя(Объект, ОрганизацияДоверитель,
						СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя);
				КонецЕсли;
				
			КонецЦикла;
			
		ИначеЕсли ТипЛицаПередавшегоПолномочия = "5" Тогда
			
			СведенияОДоверителеИностранногоЮридическогоЛица = ЛицоПередавшееПолномочия.ИнПерПолн;
			СведенияОбИностранномЮридическомЛице = СведенияОДоверителеИностранногоЮридическогоЛица.СвИнОрг;
			СведенияОРуководителяхИностранногоЮридическогоЛица = СведенияОДоверителеИностранногоЮридическогоЛица.СвРукОП;
			
			Организация = ДобавитьИностранноеЮридическоеЛицоДоверителя(Объект, СведенияОбИностранномЮридическомЛице);
			
			Для Каждого СведенияОРуководителеИностранногоЮридическогоЛица Из СведенияОРуководителяхИностранногоЮридическогоЛица Цикл
				ДобавитьДолжностноеЛицоДоверителя(Объект, Организация, СведенияОРуководителеИностранногоЮридическогоЛица);
			КонецЦикла;
			
		ИначеЕсли ТипЛицаПередавшегоПолномочия = "2" Тогда
			
			СведенияОбИндивидуальномПредпринимателе = ЛицоПередавшееПолномочия.ИППерПолн;
			ДобавитьИндивидуальногоПредпринимателяДоверителя(Объект, Неопределено, СведенияОбИндивидуальномПредпринимателе);
			
		ИначеЕсли ТипЛицаПередавшегоПолномочия = "3" Тогда
			
			СведенияОФизическомЛицеДоверителе = ЛицоПередавшееПолномочия.ФЛПерПолн;
			ДобавитьФизическоеЛицоДоверителя(Объект, СведенияОФизическомЛицеДоверителе);
			
		ИначеЕсли ТипЛицаПередавшегоПолномочия = "4" Тогда
			
			СведенияОФилиалеЮридическогоЛица = ЛицоПередавшееПолномочия.ФилПерПолн;
			СведенияОЮридическомЛице = СведенияОФилиалеЮридическогоЛица.СвФил;
			СведенияОДолжностномЛице = СведенияОФилиалеЮридическогоЛица.СвРукФил;

			ОрганизацияДоверитель = ДобавитьОрганизациюДоверителя(Объект, Неопределено, СведенияОЮридическомЛице);

			ДобавитьДолжностноеЛицоДоверителя(Объект, ОрганизацияДоверитель,
				СведенияОДолжностномЛице);
		КонецЕсли;
		
	КонецЦикла;
	
	Для Каждого СведенияОПредставителе Из СведенияОЛицахПолучившихПолномочия Цикл
		ТипПредставителя = СведенияОПредставителе.ТипПред;
		Представитель = СведенияОПредставителе.Пред;
		
		Если ТипПредставителя = "1" Тогда
			СведенияОЮридическомЛице = Представитель.СведОрг;
			ДобавитьОрганизациюПредставителя(Объект, Неопределено, СведенияОЮридическомЛице);
		ИначеЕсли ТипПредставителя = "2" Тогда
			СведенияОбИндивидуальномПредпринимателе = Представитель.СведИП;
			ДобавитьИндивидуальногоПредпринимателяПредставителя(Объект, Неопределено, СведенияОбИндивидуальномПредпринимателе);
		ИначеЕсли ТипПредставителя = "3" Тогда
			СведенияОФизическомЛице = Представитель.СведФизЛ;
			ДобавитьДолжностноеЛицоПредставителя(Объект, Неопределено, СведенияОФизическомЛице);
		ИначеЕсли ТипПредставителя = "4" Тогда
			СведенияОФилиалеЮридическогоЛица = Представитель.СведФилиал;
			ДобавитьОрганизациюПредставителя(Объект, Неопределено, СведенияОФилиалеЮридическогоЛица);
		ИначеЕсли ТипПредставителя = "5" Тогда
			СведенияОбИностранномЮридическомЛице = Представитель.СведИО;
			ДобавитьИностранноеЮридическоеЛицоПредставителя(Объект, СведенияОбИностранномЮридическомЛице);
		КонецЕсли;
	КонецЦикла;
	
	ТипПолномочия = СведенияОПередаваемыхПолномочиях.ТипПолн;
	ПризнакСовместногоОсуществленияПолномочий = СведенияОПередаваемыхПолномочиях.ПрСовмПолн;
	СведенияОМашиночитаемыхПолномочиях = СведенияОПередаваемыхПолномочиях.МашПолн;
	ТекстовоеСодержаниеПолномочия = СведенияОПередаваемыхПолномочиях.ТекстПолн;
	
	Объект.СовместныеПолномочия = ПризнакСовместногоОсуществленияПолномочий = "2";
	
	Если ТипПолномочия = "0" Тогда
		Полномочие = Объект.Полномочия.Добавить();
		Полномочие.Наименование = ТекстовоеСодержаниеПолномочия;
	ИначеЕсли ТипПолномочия = "1" Тогда
		Для Каждого СведенияОМашиночитаемомПолномочии Из СведенияОМашиночитаемыхПолномочиях Цикл
			КодПолномочия = СведенияОМашиночитаемомПолномочии.КодПолн;
			НаименованиеПолномочия = СведенияОМашиночитаемомПолномочии.НаимПолн;
			
			Полномочие = Объект.Полномочия.Добавить();
			Полномочие.Наименование = НаименованиеПолномочия;
			Полномочие.Код = КодПолномочия;
			Полномочие.ИдентификаторПолномочия = Новый УникальныйИдентификатор;
			
			СведенияОбОграниченияхКПолномочию = СведенияОМашиночитаемомПолномочии.ОгрСвПолн;
			Для Каждого СведенияОбОграниченииКПолномочию Из СведенияОбОграниченияхКПолномочию Цикл
				КодОграничения = СведенияОбОграниченииКПолномочию.КодОгр;
				НаименованиеОграничения = СведенияОбОграниченииКПолномочию.НаимОгр;
				НаименованиеЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.НаимЗначОгр;
				КодЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.КодЗначОгр;
				ТекстовоеЗначениеДляОграничения = СведенияОбОграниченииКПолномочию.ТексЗначОгр;
				
				Ограничение = Объект.Ограничения.Добавить();
				Ограничение.ИдентификаторПолномочия = Полномочие.ИдентификаторПолномочия;
				Ограничение.Код = КодОграничения;
				Ограничение.Наименование = НаименованиеОграничения;
				Ограничение.КодЗначения = КодЗначенияДляОграничения;
				Ограничение.НаименованиеЗначения = НаименованиеЗначенияДляОграничения;
				Ограничение.ТекстовоеЗначение = ТекстовоеЗначениеДляОграничения;
			КонецЦикла;
		КонецЦикла;
	КонецЕсли;
	
	КодыНалоговыхОргановДействия = СведенияОДоверенности.КодНОДейст;
	Для Каждого КодНалоговогоОрганаДействия Из КодыНалоговыхОргановДействия Цикл
		НалоговыйОрган = Объект.НалоговыеОрганыДействия.Добавить();
		НалоговыйОрган.КодНалоговогоОргана = КодНалоговогоОрганаДействия;
	КонецЦикла;

КонецПроцедуры

Процедура ВывестиДоверенность(ТабличныйДокумент, Макет, Доверенность)

	СведенияОДоверенности = Доверенность.СвДов;
	ЕдиныйРегистрационныйНомер = СведенияОДоверенности.НомДовер;
	ДатаВыдачиДоверенности = СведенияОДоверенности.ДатаВыдДовер;
	СрокДействияДоверенности = СведенияОДоверенности.СрокДейст;
	ПризнакВозможностиПередоверия = СведенияОДоверенности.ПрПередов;
	ВидДоверенности = СведенияОДоверенности.ВидДовер;
	
	ПравоПередоверия = "";
	Если ПризнакВозможностиПередоверия = "1" Тогда
		ПравоПередоверия = НСтр("ru = 'Без права передоверия'");
	ИначеЕсли ПризнакВозможностиПередоверия = "2" Тогда
		ПравоПередоверия = НСтр("ru = 'Однократное передоверие'");
	ИначеЕсли ПризнакВозможностиПередоверия = "3" Тогда
		ПравоПередоверия = НСтр("ru = 'С правом последующего передоверия'");
	КонецЕсли;
	
	ВозможностьОтзыва = "";
	Если ВидДоверенности = "1" Тогда
		ВозможностьОтзыва = НСтр("ru = 'С возможностью отзыва'");
	ИначеЕсли ВидДоверенности = "2" Тогда
		ВозможностьОтзыва = НСтр("ru = 'Без возможности отзыва'");
	КонецЕсли;
	
	Параметры = Новый Структура;
	Параметры.Вставить("ДатаВыдачиДоверенности", Формат(Дата(ДатаВыдачиДоверенности), "ДЛФ=D;"));
	Параметры.Вставить("СрокДействияДоверенности", ?(СрокДействияДоверенности = Неопределено, "", Формат(Дата(ДатаВыдачиДоверенности), "ДЛФ=D;")));
	Параметры.Вставить("ЕдиныйРегистрационныйНомер", ЕдиныйРегистрационныйНомер);
	Параметры.Вставить("ПравоПередоверия", ПравоПередоверия);
	Параметры.Вставить("ВозможностьОтзыва", ВозможностьОтзыва);
	
	ИмяОбласти = "ШапкаДоверителей";
	ОбластьМакета = Макет.ПолучитьОбласть(ИмяОбласти);
	ОбластьМакета.Параметры.Заполнить(Параметры);
	ТабличныйДокумент.Вывести(ОбластьМакета);
	
	СведенияОДоверителях = Доверенность.СвДоверит;
	Для Каждого СведенияОДоверителе Из СведенияОДоверителях Цикл
		ТипДоверителя = СведенияОДоверителе.ТипДоверит;
		Доверитель = СведенияОДоверителе.Доверит;
		ВывестиОтступ(ТабличныйДокумент, Макет);
		
		Если ТипДоверителя = "1" Тогда
			СведенияОДоверителеЮридическогоЛица = Доверитель.РосОргДовер;
			СведенияОЮридическомЛице = СведенияОДоверителеЮридическогоЛица.СвРосОрг;
			
			Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
			
			СведенияОЛицахДоверителя = СведенияОДоверителеЮридическогоЛица.ЛицоБезДов;
			
			Для Каждого СведенияОЛицеДоверителя Из СведенияОЛицахДоверителя Цикл
				
				СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании = СведенияОЛицеДоверителя.СВЮЛ;
				СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе = СведенияОЛицеДоверителя.СвИП;
				СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя = СведенияОЛицеДоверителя.СвФЛ;
				
				Если СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании <> Неопределено Тогда
					СведенияОЮридическомЛице = СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании.СвЮЛЕИО;
					СведенияОДолжностныхЛицах = СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании.СвФЛ;
					
					Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
					ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбУправляющейКомпании");
					ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
					
					Для Каждого СведенияОДолжностномЛице Из СведенияОДолжностныхЛицах Цикл
						Параметры = РеквизитыДолжностногоЛица(СведенияОДолжностномЛице);
						ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаДоверителяУровень3");
						ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлице", Параметры);
					КонецЦикла;
				КонецЕсли;
				
				Если СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе <> Неопределено Тогда
					Параметры = РеквизитыИндивидуальногоПредпринимателя(СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе);
					ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбИндивидуальномПредпринимателеУровень2");
					ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИндивидуальномПредпринимателе", Параметры);
				КонецЕсли;
				
				Если СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя <> Неопределено Тогда
					Параметры = РеквизитыДолжностногоЛица(СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя);
					ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаДоверителяУровень2");
					ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлице", Параметры);
				КонецЕсли;
				
			КонецЦикла;
			
		ИначеЕсли ТипДоверителя = "2" Тогда
			
			СведенияОДоверителеИностранногоЮридическогоЛица = Доверитель.ИнОргДовер;
			СведенияОбИностранномЮридическомЛице = СведенияОДоверителеИностранногоЮридическогоЛица.СвИнОрг;
			СведенияОРуководителяхИностранногоЮридическогоЛица = СведенияОДоверителеИностранногоЮридическогоЛица.СвРукОП;
			
			Параметры = РеквизитыИностранногоЮридическогоЛица(СведенияОбИностранномЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИностраннойОрганизации", Параметры);
			
			Для Каждого СведенияОРуководителеИностранногоЮридическогоЛица Из СведенияОРуководителяхИностранногоЮридическогоЛица Цикл
				Параметры = РеквизитыДолжностногоЛица(СведенияОРуководителеИностранногоЮридическогоЛица);
				ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаДоверителяУровень2");
				ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлице", Параметры);
			КонецЦикла;
			
		ИначеЕсли ТипДоверителя = "3" Тогда
			
			СведенияОбИндивидуальномПредпринимателе = Доверитель.ИПДовер;
			Параметры = РеквизитыИндивидуальногоПредпринимателя(СведенияОбИндивидуальномПредпринимателе);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбИндивидуальномПредпринимателеУровень1");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИндивидуальномПредпринимателе", Параметры);
			
		ИначеЕсли ТипДоверителя = "4" Тогда
			
			СведенияОФизическомЛицеДоверителе = Доверитель.ФЛДовер;
			Параметры = РеквизитыФизическогоЛицаДоверителя(СведенияОФизическомЛицеДоверителе);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаДоверителяУровень1");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлице", Параметры);
			
		КонецЕсли;
		
	КонецЦикла;
	
	ВывестиОтступ(ТабличныйДокумент, Макет);
	ВывестиОбласть(ТабличныйДокумент, Макет, "ШапкаПредставителей", Параметры);
	
	СведенияОПредставителях = Доверенность.СвУпПред;
	Для Каждого СведенияОПредставителе Из СведенияОПредставителях Цикл
		ТипПредставителя = СведенияОПредставителе.ТипПред;
		Представитель = СведенияОПредставителе.Пред;
		
		ВывестиОтступ(ТабличныйДокумент, Макет);
		
		Если ТипПредставителя = "1" Тогда
			СведенияОЮридическомЛице = Представитель.СведОрг;
			Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
		ИначеЕсли ТипПредставителя = "2" Тогда
			СведенияОбИндивидуальномПредпринимателе = Представитель.СведИП;
			Параметры = РеквизитыИндивидуальногоПредпринимателя(СведенияОбИндивидуальномПредпринимателе);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбИндивидуальномПредпринимателеУровень1");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИндивидуальномПредпринимателе", Параметры);
		ИначеЕсли ТипПредставителя = "3" Тогда
			СведенияОФизическомЛице = Представитель.СведФизЛ;
			Параметры = РеквизитыДолжностногоЛица(СведенияОФизическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокФизическогоЛицаПредставителя", Параметры);
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлице", Параметры);
		ИначеЕсли ТипПредставителя = "4" Тогда
			СведенияОФилиалеЮридическогоЛица = Представитель.СведФилиал;
			Параметры = РеквизитыЮридическогоЛица(СведенияОФилиалеЮридическогоЛица);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
		ИначеЕсли ТипПредставителя = "5" Тогда
			СведенияОбИностранномЮридическомЛице = Представитель.СведИО;
			Параметры = РеквизитыИностранногоЮридическогоЛица(СведенияОбИностранномЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИностраннойОрганизации", Параметры);
		КонецЕсли;
	КонецЦикла;
	 
	СведенияОПолномочияхПредставителей = Доверенность.СвПолн;
	ТипПолномочия = СведенияОПолномочияхПредставителей.ТипПолн;
	СведенияОМашиночитаемыхПолномочиях = СведенияОПолномочияхПредставителей.МашПолн;
	ТекстовоеСодержаниеПолномочия = СведенияОПолномочияхПредставителей.ТекстПолн;
	
	ВывестиОтступ(ТабличныйДокумент, Макет);
	ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокПолномочий");
	
	Если ТипПолномочия = "0" Тогда
		Параметры = Новый Структура;
		Параметры.Вставить("ОписаниеПолномочия", ТекстовоеСодержаниеПолномочия);
		ВывестиОбласть(ТабличныйДокумент, Макет, "СтрокаПолномочия", Параметры);
	ИначеЕсли ТипПолномочия = "1" Тогда
		Для Каждого СведенияОМашиночитаемомПолномочии Из СведенияОМашиночитаемыхПолномочиях Цикл
			КодПолномочия = СведенияОМашиночитаемомПолномочии.КодПолн;
			НаименованиеПолномочия = СведенияОМашиночитаемомПолномочии.НаимПолн;
			
			ОписаниеПолномочия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
				"ru = '%1 %2'"), КодПолномочия, НаименованиеПолномочия);
			
			Параметры = Новый Структура;
			Параметры.Вставить("ОписаниеПолномочия", ОписаниеПолномочия);
			ВывестиОбласть(ТабличныйДокумент, Макет, "СтрокаПолномочия", Параметры);
			
			СведенияОбОграниченияхКПолномочию = СведенияОМашиночитаемомПолномочии.ОгрСвПолн;
			Для Каждого СведенияОбОграниченииКПолномочию Из СведенияОбОграниченияхКПолномочию Цикл
				КодОграничения = СведенияОбОграниченииКПолномочию.КодОгр;
				НаименованиеОграничения = СведенияОбОграниченииКПолномочию.НаимОгр;
				НаименованиеЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.НаимЗначОгр;
				КодЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.КодЗначОгр;
				ТекстовоеЗначениеДляОграничения = СведенияОбОграниченииКПолномочию.ТексЗначОгр;
				
				Ограничение = Новый Массив;
				Ограничение.Добавить(КодОграничения);
				Ограничение.Добавить(НаименованиеОграничения);
				Если ЗначениеЗаполнено(КодЗначенияДляОграничения) Тогда
					Ограничение.Добавить(КодЗначенияДляОграничения);
					Ограничение.Добавить(НаименованиеЗначенияДляОграничения);
				Иначе
					Ограничение.Добавить(ТекстовоеЗначениеДляОграничения);
				КонецЕсли;
				
				ОписаниеОграничения = Символы.Таб + СтрСоединить(Ограничение, ", ");

				Параметры = Новый Структура;
				Параметры.Вставить("ОписаниеПолномочия", ОписаниеОграничения);
				ВывестиОбласть(ТабличныйДокумент, Макет, "СтрокаПолномочия", Параметры);
			КонецЦикла;
		КонецЦикла;
	КонецЕсли;
	
	ВывестиОбласть(ТабличныйДокумент, Макет, "ПодвалПолномочий");

КонецПроцедуры

Процедура ВывестиПередоверие(ТабличныйДокумент, Макет, Передоверие)

	СведенияОПервоначальнойДоверенности = Передоверие.СвПервДовер;
	СведенияОДоверенностиОснованииПередоверия = Передоверие.СвПередов;
	СведенияОДоверенности = Передоверие.СвПереДовер;
	СведенияОЛицахПередавшихПолномочия = Передоверие.СвПередПолн;
	СведенияОЛицахПолучившихПолномочия = Передоверие.СвПолучПолн;
	СведенияОПередаваемыхПолномочиях = Передоверие.СвПолн;
	
	ЕдиныйРегистрационныйНомер = СведенияОДоверенности.НомДовер;
	ДатаВыдачиДоверенности = СведенияОДоверенности.ДатаВыдДовер;
	СрокДействияДоверенности = СведенияОДоверенности.СрокДейст;
	ПризнакВозможностиПередоверия = СведенияОДоверенности.ПрПередов;
	ВидДоверенности = СведенияОДоверенности.ВидДовер;
	
	НомерДоверенностиОснования = СведенияОПервоначальнойДоверенности.НомДоверПерв;
	Если СведенияОДоверенностиОснованииПередоверия <> Неопределено Тогда
		НомерДоверенностиОснования = СведенияОДоверенностиОснованииПередоверия.НомДоверN;
	КонецЕсли;
	
	ПравоПередоверия = "";
	Если ПризнакВозможностиПередоверия = "1" Тогда
		ПравоПередоверия = НСтр("ru = 'Без права передоверия'");
	ИначеЕсли ПризнакВозможностиПередоверия = "2" Тогда
		ПравоПередоверия = НСтр("ru = 'Однократное передоверие'");
	ИначеЕсли ПризнакВозможностиПередоверия = "3" Тогда
		ПравоПередоверия = НСтр("ru = 'С правом последующего передоверия'");
	КонецЕсли;
	
	ВозможностьОтзыва = "";
	Если ВидДоверенности = "1" Тогда
		ВозможностьОтзыва = НСтр("ru = 'С возможностью отзыва'");
	ИначеЕсли ВидДоверенности = "2" Тогда
		ВозможностьОтзыва = НСтр("ru = 'Без возможности отзыва'");
	КонецЕсли;
	
	Параметры = Новый Структура;
	Параметры.Вставить("ДатаВыдачиДоверенности", Формат(Дата(ДатаВыдачиДоверенности), "ДЛФ=D;"));
	Параметры.Вставить("СрокДействияДоверенности", ?(СрокДействияДоверенности = Неопределено, "", Формат(Дата(ДатаВыдачиДоверенности), "ДЛФ=D;")));
	Параметры.Вставить("ЕдиныйРегистрационныйНомер", ЕдиныйРегистрационныйНомер);
	Параметры.Вставить("ПравоПередоверия", ПравоПередоверия);
	Параметры.Вставить("ВозможностьОтзыва", ВозможностьОтзыва);
	
	ИмяОбласти = "ШапкаДоверителей";
	ОбластьМакета = Макет.ПолучитьОбласть(ИмяОбласти);
	ОбластьМакета.Параметры.Заполнить(Параметры);
	ТабличныйДокумент.Вывести(ОбластьМакета);
	
	Для Каждого СведенияОЛицеПередавшемПолномочия Из СведенияОЛицахПередавшихПолномочия Цикл
		ТипЛицаПередавшегоПолномочия = СведенияОЛицеПередавшемПолномочия.ТипПерПолн;
		ЛицоПередавшееПолномочия = СведенияОЛицеПередавшемПолномочия.ПередПолн;
		
		ВывестиОтступ(ТабличныйДокумент, Макет);
		
		Если ТипЛицаПередавшегоПолномочия = "1" Тогда
			СведенияОДоверителеЮридическогоЛица = ЛицоПередавшееПолномочия.РосОргПерПолн;
			СведенияОЮридическомЛице = СведенияОДоверителеЮридическогоЛица.СвРосОрг;
			СведенияОЛицахДоверителя = СведенияОДоверителеЮридическогоЛица.ЛицоБезДов;
			
			Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
			
			СведенияОЛицахДоверителя = СведенияОДоверителеЮридическогоЛица.ЛицоБезДов;
			
			Для Каждого СведенияОЛицеДоверителя Из СведенияОЛицахДоверителя Цикл
				
				СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании = СведенияОЛицеДоверителя.СВЮЛ;
				СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе = СведенияОЛицеДоверителя.СвИП;
				СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя = СведенияОЛицеДоверителя.СвФЛ;
				
				Если СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании <> Неопределено Тогда
					СведенияОЮридическомЛице = СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании.СвЮЛЕИО;
					СведенияОДолжностныхЛицах = СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании.СвФЛ;
					
					Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
					ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбУправляющейКомпании");
					ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
					
					Для Каждого СведенияОДолжностномЛице Из СведенияОДолжностныхЛицах Цикл
						Параметры = РеквизитыДолжностногоЛица(СведенияОДолжностномЛице);
						Параметры.Вставить("ПредставлениеДоверенности", НомерДоверенностиОснования);
						ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаПоДоверенностиУровень3");
						ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлицеПоДоверенности", Параметры);
					КонецЦикла;
				КонецЕсли;
				
				Если СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе <> Неопределено Тогда
					Параметры = РеквизитыИндивидуальногоПредпринимателя(СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе);
					Параметры.Вставить("ПредставлениеДоверенности", НомерДоверенностиОснования);
					ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбИндивидуальномПредпринимателеУровень2");
					ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИндивидуальномПредпринимателеПоДоверенности", Параметры);
				КонецЕсли;
				
				Если СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя <> Неопределено Тогда
					Параметры = РеквизитыДолжностногоЛица(СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя);
					Параметры.Вставить("ПредставлениеДоверенности", НомерДоверенностиОснования);
					ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаПоДоверенностиУровень2");
					ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлицеПоДоверенности", Параметры);
				КонецЕсли;
				
			КонецЦикла;
			
		ИначеЕсли ТипЛицаПередавшегоПолномочия = "5" Тогда
			
			СведенияОДоверителеИностранногоЮридическогоЛица = ЛицоПередавшееПолномочия.ИнПерПолн;
			СведенияОбИностранномЮридическомЛице = СведенияОДоверителеИностранногоЮридическогоЛица.СвИнОрг;
			СведенияОРуководителяхИностранногоЮридическогоЛица = СведенияОДоверителеИностранногоЮридическогоЛица.СвРукОП;
			
			Параметры = РеквизитыИностранногоЮридическогоЛица(СведенияОбИностранномЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИностраннойОрганизации", Параметры);
			
			Для Каждого СведенияОРуководителеИностранногоЮридическогоЛица Из СведенияОРуководителяхИностранногоЮридическогоЛица Цикл
				Параметры = РеквизитыДолжностногоЛица(СведенияОРуководителеИностранногоЮридическогоЛица);
				Параметры.Вставить("ПредставлениеДоверенности", НомерДоверенностиОснования);
				ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаПоДоверенностиУровень2");
				ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлицеПоДоверенности", Параметры);
			КонецЦикла;
			
		ИначеЕсли ТипЛицаПередавшегоПолномочия = "2" Тогда
			
			СведенияОбИндивидуальномПредпринимателе = ЛицоПередавшееПолномочия.ИППерПолн;
			Параметры = РеквизитыИндивидуальногоПредпринимателя(СведенияОбИндивидуальномПредпринимателе);
			Параметры.Вставить("ПредставлениеДоверенности", НомерДоверенностиОснования);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбИндивидуальномПредпринимателеУровень1");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИндивидуальномПредпринимателеПоДоверенности", Параметры);
			
		ИначеЕсли ТипЛицаПередавшегоПолномочия = "3" Тогда
			
			СведенияОФизическомЛицеДоверителе = ЛицоПередавшееПолномочия.ФЛПерПолн;
			Параметры = РеквизитыФизическогоЛицаДоверителя(СведенияОФизическомЛицеДоверителе);
			Параметры.Вставить("ПредставлениеДоверенности", НомерДоверенностиОснования);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаПоДоверенностиУровень1");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлицеПоДоверенности", Параметры);
			
		ИначеЕсли ТипЛицаПередавшегоПолномочия = "4" Тогда
			
			СведенияОФилиалеЮридическогоЛица = ЛицоПередавшееПолномочия.ФилПерПолн;
			СведенияОЮридическомЛице = СведенияОДоверителеЮридическогоЛица.СвФил;
			СведенияОДолжностномЛице = СведенияОДоверителеЮридическогоЛица.СвРукФил;
			
			Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
			
			Параметры = РеквизитыДолжностногоЛица(СведенияОДолжностномЛице);
			Параметры.Вставить("ПредставлениеДоверенности", НомерДоверенностиОснования);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаПоДоверенностиУровень3");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлицеПоДоверенности", Параметры);
			
		КонецЕсли;
		
	КонецЦикла;
	
	ВывестиОтступ(ТабличныйДокумент, Макет);
	ВывестиОбласть(ТабличныйДокумент, Макет, "ШапкаПредставителей", Параметры);
	
	Для Каждого СведенияОПредставителе Из СведенияОЛицахПолучившихПолномочия Цикл
		ТипПредставителя = СведенияОПредставителе.ТипПред;
		Представитель = СведенияОПредставителе.Пред;
		
		ВывестиОтступ(ТабличныйДокумент, Макет);
		
		Если ТипПредставителя = "1" Тогда
			СведенияОЮридическомЛице = Представитель.СведОрг;
			Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
		ИначеЕсли ТипПредставителя = "2" Тогда
			СведенияОбИндивидуальномПредпринимателе = Представитель.СведИП;
			Параметры = РеквизитыИндивидуальногоПредпринимателя(СведенияОбИндивидуальномПредпринимателе);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбИндивидуальномПредпринимателеУровень1");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИндивидуальномПредпринимателе", Параметры);
		ИначеЕсли ТипПредставителя = "3" Тогда
			СведенияОФизическомЛице = Представитель.СведФизЛ;
			Параметры = РеквизитыДолжностногоЛица(СведенияОФизическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокФизическогоЛицаПредставителя", Параметры);
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлице", Параметры);
		ИначеЕсли ТипПредставителя = "4" Тогда
			СведенияОФилиалеЮридическогоЛица = Представитель.СведФилиал;
			Параметры = РеквизитыЮридическогоЛица(СведенияОФилиалеЮридическогоЛица);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
		ИначеЕсли ТипПредставителя = "5" Тогда
			СведенияОбИностранномЮридическомЛице = Представитель.СведИО;
			Параметры = РеквизитыИностранногоЮридическогоЛица(СведенияОбИностранномЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИностраннойОрганизации", Параметры);
		КонецЕсли;
	КонецЦикла;
	 
	ТипПолномочия = СведенияОПередаваемыхПолномочиях.ТипПолн;
	СведенияОМашиночитаемыхПолномочиях = СведенияОПередаваемыхПолномочиях.МашПолн;
	ТекстовоеСодержаниеПолномочия = СведенияОПередаваемыхПолномочиях.ТекстПолн;
	
	ВывестиОтступ(ТабличныйДокумент, Макет);
	ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокПолномочий");
	
	Если ТипПолномочия = "0" Тогда
		Параметры = Новый Структура;
		Параметры.Вставить("ОписаниеПолномочия", ТекстовоеСодержаниеПолномочия);
		ВывестиОбласть(ТабличныйДокумент, Макет, "СтрокаПолномочия", Параметры);
	ИначеЕсли ТипПолномочия = "1" Тогда
		Для Каждого СведенияОМашиночитаемомПолномочии Из СведенияОМашиночитаемыхПолномочиях Цикл
			КодПолномочия = СведенияОМашиночитаемомПолномочии.КодПолн;
			НаименованиеПолномочия = СведенияОМашиночитаемомПолномочии.НаимПолн;
			
			ОписаниеПолномочия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
				"ru = '%1 %2'"), КодПолномочия, НаименованиеПолномочия);
			
			Параметры = Новый Структура;
			Параметры.Вставить("ОписаниеПолномочия", ОписаниеПолномочия);
			ВывестиОбласть(ТабличныйДокумент, Макет, "СтрокаПолномочия", Параметры);
			
			СведенияОбОграниченияхКПолномочию = СведенияОМашиночитаемомПолномочии.ОгрСвПолн;
			Для Каждого СведенияОбОграниченииКПолномочию Из СведенияОбОграниченияхКПолномочию Цикл
				КодОграничения = СведенияОбОграниченииКПолномочию.КодОгр;
				НаименованиеОграничения = СведенияОбОграниченииКПолномочию.НаимОгр;
				НаименованиеЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.НаимЗначОгр;
				КодЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.КодЗначОгр;
				ТекстовоеЗначениеДляОграничения = СведенияОбОграниченииКПолномочию.ТексЗначОгр;
				
				Ограничение = Новый Массив;
				Ограничение.Добавить(КодОграничения);
				Ограничение.Добавить(НаименованиеОграничения);
				Если ЗначениеЗаполнено(КодЗначенияДляОграничения) Тогда
					Ограничение.Добавить(КодЗначенияДляОграничения);
					Ограничение.Добавить(НаименованиеЗначенияДляОграничения);
				Иначе
					Ограничение.Добавить(ТекстовоеЗначениеДляОграничения);
				КонецЕсли;
				
				ОписаниеОграничения = Символы.Таб + СтрСоединить(Ограничение, ", ");

				Параметры = Новый Структура;
				Параметры.Вставить("ОписаниеПолномочия", ОписаниеОграничения);
				ВывестиОбласть(ТабличныйДокумент, Макет, "СтрокаПолномочия", Параметры);
			КонецЦикла;
		КонецЦикла;
	КонецЕсли;
	
	ВывестиОбласть(ТабличныйДокумент, Макет, "ПодвалПолномочий");
		
КонецПроцедуры


#КонецОбласти

#КонецЕсли
